Merge branch 'upstream-master'

This commit is contained in:
Giacomo Tesio 2019-08-27 11:21:46 +02:00
commit fef0609608
55 changed files with 1913 additions and 225 deletions

View File

@ -60,6 +60,9 @@ EOF
cat > fstat.c <<EOF
$lu#include <string.h>
#include <sys/stat.h>
#undef st_atime
#undef st_mtime
#undef st_ctime
int
_fstat (int fd, struct stat *buf)
{
@ -81,9 +84,9 @@ _fstat (int fd, struct stat *buf)
buf->st_size = ks.st_size;
buf->st_blksize = ks.st_blksize;
buf->st_blocks = ks.st_blocks;
buf->st_atime = ks.st_atime;
buf->st_mtime = ks.st_mtime;
buf->st_ctime = ks.st_ctime;
buf->st_atim.tv_sec = ks.st_atime;
buf->st_mtim.tv_sec = ks.st_mtime;
buf->st_ctim.tv_sec = ks.st_ctime;
R (retval)
EOF
cat > getpid.c <<EOF
@ -216,6 +219,9 @@ EOF
cat > stat.c <<EOF
$lu#include <string.h>
#include <sys/stat.h>
#undef st_atime
#undef st_mtime
#undef st_ctime
int
_stat (const char *path, struct stat *buf)
{
@ -237,9 +243,9 @@ _stat (const char *path, struct stat *buf)
buf->st_size = ks.st_size;
buf->st_blksize = ks.st_blksize;
buf->st_blocks = ks.st_blocks;
buf->st_atime = ks.st_atime;
buf->st_mtime = ks.st_mtime;
buf->st_ctime = ks.st_ctime;
buf->st_atim.tv_sec = ks.st_atime;
buf->st_mtim.tv_sec = ks.st_mtime;
buf->st_ctim.tv_sec = ks.st_ctime;
R (retval)
EOF
cat > times.c <<EOF

View File

@ -94,9 +94,9 @@ __hosted_from_gdb_stat (const struct gdb_stat *gs,
s->st_size = gs->st_size;
s->st_blksize = gs->st_blksize;
s->st_blocks = gs->st_blocks;
s->st_atime = gs->st_atime;
s->st_mtime = gs->st_mtime;
s->st_ctime = gs->st_ctime;
s->st_atime = gs->st_atim;
s->st_mtime = gs->st_mtim;
s->st_ctime = gs->st_ctim;
}
void

View File

@ -57,9 +57,9 @@ struct gdb_stat {
uint64_t st_size; /* total size, in bytes */
uint64_t st_blksize; /* blocksize for filesystem I/O */
uint64_t st_blocks; /* number of blocks allocated */
gdb_time_t st_atime; /* time of last access */
gdb_time_t st_mtime; /* time of last modification */
gdb_time_t st_ctime; /* time of last change */
gdb_time_t st_atim; /* time of last access */
gdb_time_t st_mtim; /* time of last modification */
gdb_time_t st_ctim; /* time of last change */
};
struct gdb_timeval {

View File

@ -297,6 +297,8 @@ def synopsis(c, t):
# preprocessor # directives, structs, comments in square brackets
funcsynopsisinfo = lxml.etree.SubElement(funcsynopsis, 'funcsynopsisinfo')
funcsynopsisinfo.text = l.strip() + '\n'
elif re.match('[Ll]ink with', l):
pass
else:
s = s + l
@ -312,7 +314,7 @@ def synopsis(c, t):
if s.strip():
print("surplus synopsis '%s'" % s, file=sys.stderr)
raise
exit(1)
def synopsis_for_prototype(funcsynopsis, s):
s = s.strip()

View File

@ -0,0 +1,42 @@
/* Copyright (c) 2017 SiFive Inc. All rights reserved.
This copyrighted material is made available to anyone wishing to use,
modify, copy, or redistribute it subject to the terms and conditions
of the FreeBSD License. This program is distributed in the hope that
it will be useful, but WITHOUT ANY WARRANTY expressed or implied,
including the implied warranties of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. A copy of this license is available at
http://www.opensource.org/licenses.
*/
#ifndef _FENV_H
#define _FENV_H
#include <sys/fenv.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Exception */
int feclearexcept(int excepts);
int fegetexceptflag(fexcept_t *flagp, int excepts);
int feraiseexcept(int excepts);
int fesetexceptflag(const fexcept_t *flagp, int excepts);
int fetestexcept(int excepts);
/* Rounding mode */
int fegetround(void);
int fesetround(int rounding_mode);
/* Float environment */
int fegetenv(fenv_t *envp);
int feholdexcept(fenv_t *envp);
int fesetenv(const fenv_t *envp);
int feupdateenv(const fenv_t *envp);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -93,10 +93,16 @@ int sched_yield( void );
#if __GNU_VISIBLE
int sched_getcpu(void);
/* The following functions should only be declared if the type
cpu_set_t is defined through indirect inclusion of sys/cpuset.h,
only available on some targets. */
#ifdef _SYS_CPUSET_H_
int sched_getaffinity (pid_t, size_t, cpu_set_t *);
int sched_get_thread_affinity (void *, size_t, cpu_set_t *);
int sched_setaffinity (pid_t, size_t, const cpu_set_t *);
int sched_set_thread_affinity (void *, size_t, const cpu_set_t *);
#endif /* _SYS_CPUSET_H_ */
#endif
#ifdef __cplusplus

View File

@ -0,0 +1,113 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.org
(c) Copyright 2019 Craig Howlang <craig.howland@caci.com>
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 COPYRIGHT HOLDERS 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
HOLDER 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_FENV_H_
#define _SYS_FENV_H_
/*******************************************************************************
* THIS FILE IS A TEMPLATE, INTENDED TO BE USED AS A STARTING POINT FOR
* TARGET-SPECIFIC FLOATING-POINT IMPLEMENTATIONS. NOTES BELOW HIGHLIGHT THE
* BASICS OF WHAT NEEDS TO BE DEFINED. THE DEFAULT IMPLEMTATION IS
* DEGENERATE, WITH ALL FUNCTIONS RETURNING ERROR AND NO EXCEPTIONS AND NO
* ROUNDING MODES DEFINED (SINCE NONE ARE SUPPORTED).
* THE MACRO VALUES ARE EXAMPLES ONLY, ALTHOUGH TAKEN FROM A WORKING
* IMPLEMENTATION.
* REMOVE THIS NOTICE WHEN COPYING TO A REAL IMPLEMENTATION, REPLACING IT WITH
* ANY TARGET-SPECIFIC NOTES OF INTEREST. THE FENV FUNCTION MAN PAGES POINT TO
* THIS FILE AS A MEANS OF DETERMINING A FUNCTIONAL VS. NON-FUNCTIONAL
* IMPLEMENTATION.
******************************************************************************/
/*
* The following macros are to be defined if the respective exception is
* supported by the implementation, each with a unique bit mask:
*
* FE_DIVBYZERO
* FE_INEXACT
* FE_INVALID
* FE_OVERFLOW
* FE_UNDERFLOW
*
* Other implementation-specific exceptions may be defined, and must start
* with FE_ followed by a capital letter.
*
* FE_ALL_EXCEPT must be defined as the logical OR of all exceptions.
*/
//#define FE_DIVBYZERO 0x00000001
//#define FE_INEXACT 0x00000002
//#define FE_INVALID 0x00000004
//#define FE_OVERFLOW 0x00000008
//#define FE_UNDERFLOW 0x00000010
//#define FE_ALL_EXCEPT \
//(FE_DIVBYZERO|FE_INEXACT|FE_INVALID|FE_OVERFLOW|FE_UNDERFLOW)
#define FE_ALL_EXCEPT 0 /* NONE SUPPORTED IN PLACEHOLDER TEMPLATE */
/*
* The following macros are to be defined if the respective rounding
* direction is supported by the implementation via the fegetround() and
* fesetround() functions, each with a unique positive value.
*
* FE_DOWNWARD
* FE_TONEAREST
* FE_TOWARDZERO
* FE_UPWARD
*
* Other implementation-specific rounding modes may be defined, and must start
* with FE_ followed by a capital letter.
*/
//#define FE_DOWNWARD 1
//#define FE_TONEAREST 2
//#define FE_TOWARDZERO 3
//#define FE_UPWARD 4
/*
* The following typedefs are required. These should be defined properly
* to support the architecture specific implementation. See the C and
* POSIX standards for details:
*
* fenv_t
* fexcept_t
*/
typedef int fenv_t;
typedef int fexcept_t;
/*
* Lastly, a FE_DFL_ENV macro must be defined, representing a pointer
* to const fenv_t that contains the value of the default floating point
* environment.
*
* NOTE: The extern'ed variable fe_default_env_p is an implementation
* detail of this stub. FE_DFL_ENV must point to an instance of
* fenv_t with the default fenv_t. The format of fenv_t and where
* FE_DFL_ENV is are implementation specific.
*/
extern const fenv_t *_fe_dfl_env;
#define FE_DFL_ENV _fe_dfl_env
#endif /* _SYS_FENV_H_ */

View File

@ -34,33 +34,23 @@ struct stat
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
#if defined(__rtems__)
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
#else
/* SysV/sco doesn't have the rest... But Solaris, eabi does. */
#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
#else
time_t st_atime;
long st_spare1;
time_t st_mtime;
long st_spare2;
time_t st_ctime;
long st_spare3;
blksize_t st_blksize;
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
long st_spare4[2];
#if !defined(__rtems__)
long st_spare4[2];
#endif
#endif
};
#if defined(__rtems__)
#if !(defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)) && !defined(__cris__)
#define st_atime st_atim.tv_sec
#define st_ctime st_ctim.tv_sec
#define st_mtime st_mtim.tv_sec

View File

@ -198,7 +198,6 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@

View File

@ -69,9 +69,9 @@ LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
lib_a_AR = $(AR) $(ARFLAGS)
lib_a_LIBADD =
am_lib_a_OBJECTS = lib_a-memset.$(OBJEXT) lib_a-memcpy.$(OBJEXT) \
lib_a-memcpy-asm.$(OBJEXT) \
lib_a-memmove.$(OBJEXT) lib_a-memmove-stub.$(OBJEXT) \
am_lib_a_OBJECTS = lib_a-memmove.$(OBJEXT) \
lib_a-memmove-stub.$(OBJEXT) lib_a-memset.$(OBJEXT) \
lib_a-memcpy-asm.$(OBJEXT) lib_a-memcpy.$(OBJEXT) \
lib_a-strlen.$(OBJEXT) lib_a-strcpy.$(OBJEXT) \
lib_a-strcmp.$(OBJEXT) lib_a-setjmp.$(OBJEXT) \
lib_a-ieeefp.$(OBJEXT) lib_a-ffs.$(OBJEXT)
@ -200,8 +200,9 @@ AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
AM_CCASFLAGS = $(INCLUDES)
noinst_LIBRARIES = lib.a
lib_a_SOURCES = memcpy-asm.S memmove.S memmove-stub.c memset.S memcpy.c strlen.c \
lib_a_SOURCES = memmove.S memmove-stub.c memset.S memcpy-asm.S memcpy.c strlen.c \
strcpy.c strcmp.S setjmp.S ieeefp.c ffs.c
lib_a_CCASFLAGS = $(AM_CCASFLAGS)
lib_a_CFLAGS = $(AM_CFLAGS)
ACLOCAL_AMFLAGS = -I ../../.. -I ../../../..
@ -270,18 +271,18 @@ lib_a-memmove.o: memmove.S
lib_a-memmove.obj: memmove.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memmove.obj `if test -f 'memmove.S'; then $(CYGPATH_W) 'memmove.S'; else $(CYGPATH_W) '$(srcdir)/memmove.S'; fi`
lib_a-memcpy-asm.o: memcpy-asm.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memcpy-asm.o `test -f 'memcpy-asm.S' || echo '$(srcdir)/'`memcpy-asm.S
lib_a-memcpy-asm.obj: memcpy-asm.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memcpy-asm.obj `if test -f 'memcpy-asm.S'; then $(CYGPATH_W) 'memcpy-asm.S'; else $(CYGPATH_W) '$(srcdir)/memcpy-asm.S'; fi`
lib_a-memset.o: memset.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memset.o `test -f 'memset.S' || echo '$(srcdir)/'`memset.S
lib_a-memset.obj: memset.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memset.obj `if test -f 'memset.S'; then $(CYGPATH_W) 'memset.S'; else $(CYGPATH_W) '$(srcdir)/memset.S'; fi`
lib_a-memcpy-asm.o: memcpy-asm.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memcpy-asm.o `test -f 'memcpy-asm.S' || echo '$(srcdir)/'`memcpy-asm.S
lib_a-memcpy-asm.obj: memcpy-asm.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-memcpy-asm.obj `if test -f 'memcpy-asm.S'; then $(CYGPATH_W) 'memcpy-asm.S'; else $(CYGPATH_W) '$(srcdir)/memcpy-asm.S'; fi`
lib_a-strcmp.o: strcmp.S
$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CCASFLAGS) $(CCASFLAGS) -c -o lib_a-strcmp.o `test -f 'strcmp.S' || echo '$(srcdir)/'`strcmp.S

View File

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.12.2 from Makefile.am.
# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2012 Free Software Foundation, Inc.
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in 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.
@ -53,11 +54,15 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/../../Makefile.shared $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(top_srcdir)/../../mkinstalldirs
$(srcdir)/Makefile.am
subdir = search
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../acinclude.m4 \
$(top_srcdir)/configure.in
am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
$(top_srcdir)/../../ltoptions.m4 \
$(top_srcdir)/../../ltsugar.m4 \
$(top_srcdir)/../../ltversion.m4 \
$(top_srcdir)/../../lt~obsolete.m4 \
$(top_srcdir)/../acinclude.m4 $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
@ -182,10 +187,8 @@ LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
NM = @NM@
@ -214,7 +217,6 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
aext = @aext@
@ -374,14 +376,12 @@ lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES) $(EXTRA_lib_a_DEPENDENCIES)
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
test -z "$$locs" || { \
echo rm -f $${locs}; \
rm -f $${locs}; \
}
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libsearch.la: $(libsearch_la_OBJECTS) $(libsearch_la_DEPENDENCIES) $(EXTRA_libsearch_la_DEPENDENCIES)
$(libsearch_la_LINK) $(am_libsearch_la_rpath) $(libsearch_la_OBJECTS) $(libsearch_la_LIBADD) $(LIBS)
@ -563,20 +563,6 @@ GTAGS:
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: $(HEADERS) $(SOURCES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
check-am:
@ -687,7 +673,7 @@ uninstall-am:
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
cscopelist ctags distclean distclean-compile distclean-generic \
ctags distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags dvi dvi-am html html-am info \
info-am install install-am install-data install-data-am \
install-dvi install-dvi-am install-exec install-exec-am \

View File

@ -143,10 +143,11 @@ memmem (const void *haystack, size_t hs_len, const void *needle, size_t ne_len)
size_t tmp, shift1;
size_t m1 = ne_len - 1;
size_t offset = 0;
int i;
/* Initialize bad character shift hash table. */
memset (shift, 0, sizeof (shift));
for (int i = 1; i < m1; i++)
for (i = 1; i < m1; i++)
shift[hash2 (ne + i)] = i;
shift1 = m1 - shift[hash2 (ne + m1)];
shift[hash2 (ne + m1)] = m1;

View File

@ -102,7 +102,8 @@ strstr2 (const unsigned char *hs, const unsigned char *ne)
{
uint32_t h1 = (ne[0] << 16) | ne[1];
uint32_t h2 = 0;
for (int c = hs[0]; h1 != h2 && c != 0; c = *++hs)
int c;
for (c = hs[0]; h1 != h2 && c != 0; c = *++hs)
h2 = (h2 << 16) | c;
return h1 == h2 ? (char *)hs - 2 : NULL;
}
@ -112,7 +113,8 @@ strstr3 (const unsigned char *hs, const unsigned char *ne)
{
uint32_t h1 = (ne[0] << 24) | (ne[1] << 16) | (ne[2] << 8);
uint32_t h2 = 0;
for (int c = hs[0]; h1 != h2 && c != 0; c = *++hs)
int c;
for (c = hs[0]; h1 != h2 && c != 0; c = *++hs)
h2 = (h2 | c) << 8;
return h1 == h2 ? (char *)hs - 3 : NULL;
}
@ -122,7 +124,8 @@ strstr4 (const unsigned char *hs, const unsigned char *ne)
{
uint32_t h1 = (ne[0] << 24) | (ne[1] << 16) | (ne[2] << 8) | ne[3];
uint32_t h2 = 0;
for (int c = hs[0]; c != 0 && h1 != h2; c = *++hs)
int c;
for (c = hs[0]; c != 0 && h1 != h2; c = *++hs)
h2 = (h2 << 8) | c;
return h1 == h2 ? (char *)hs - 4 : NULL;
}
@ -142,6 +145,7 @@ strstr (const char *haystack, const char *needle)
{
const unsigned char *hs = (const unsigned char *) haystack;
const unsigned char *ne = (const unsigned char *) needle;
int i;
/* Handle short needle special cases first. */
if (ne[0] == '\0')
@ -170,7 +174,7 @@ strstr (const char *haystack, const char *needle)
/* Initialize bad character shift hash table. */
memset (shift, ne_len + 1, sizeof (shift));
for (int i = 0; i < ne_len; i++)
for (i = 0; i < ne_len; i++)
shift[ne[i] % sizeof (shift)] = ne_len - i;
do

View File

@ -8,17 +8,17 @@ else
MATHDIR = math
endif
SUBDIRS = $(MATHDIR) common complex machine
SUBDIRS = $(MATHDIR) common complex fenv machine
libm_la_LDFLAGS = -Xcompiler -nostdlib
if USE_LIBTOOL
SUBLIBS = $(MATHDIR)/lib$(MATHDIR).$(aext) common/libcommon.$(aext) complex/libcomplex.$(aext) $(LIBM_MACHINE_LIB)
SUBLIBS = $(MATHDIR)/lib$(MATHDIR).$(aext) common/libcommon.$(aext) complex/libcomplex.$(aext) fenv/libfenv.$(aext) $(LIBM_MACHINE_LIB)
noinst_LTLIBRARIES = libm.la
libm_la_SOURCES =
libm_la_LIBADD = $(SUBLIBS)
else
SUBLIBS = $(MATHDIR)/lib.$(aext) common/lib.$(aext) complex/lib.$(aext) $(LIBM_MACHINE_LIB)
SUBLIBS = $(MATHDIR)/lib.$(aext) common/lib.$(aext) complex/lib.$(aext) fenv/lib.$(aext) $(LIBM_MACHINE_LIB)
noinst_LIBRARIES = libm.a
libm.a: $(SUBLIBS)
rm -f $@
@ -39,7 +39,7 @@ info_TEXINFOS = libm.texinfo
libm_TEXINFOS = targetdep.tex
libm.dvi: targetdep.tex math/stmp-def complex/stmp-def
libm.dvi: targetdep.tex math/stmp-def complex/stmp-def fenv/stmp-def
stmp-targetdep: force
rm -f tmp.texi
@ -58,6 +58,8 @@ math/stmp-def: stmp-targetdep ; @true
complex/stmp-def: stmp-targetdep ; @true
fenv/stmp-def: stmp-targetdep ; @true
docbook-recursive: force
for d in $(SUBDIRS); do \
if test "$$d" != "."; then \

View File

@ -80,12 +80,12 @@ LTLIBRARIES = $(noinst_LTLIBRARIES)
am__DEPENDENCIES_1 =
@USE_LIBTOOL_FALSE@am__DEPENDENCIES_2 = $(MATHDIR)/lib.$(aext) \
@USE_LIBTOOL_FALSE@ common/lib.$(aext) complex/lib.$(aext) \
@USE_LIBTOOL_FALSE@ $(am__DEPENDENCIES_1)
@USE_LIBTOOL_FALSE@ fenv/lib.$(aext) $(am__DEPENDENCIES_1)
@USE_LIBTOOL_TRUE@am__DEPENDENCIES_2 = \
@USE_LIBTOOL_TRUE@ $(MATHDIR)/lib$(MATHDIR).$(aext) \
@USE_LIBTOOL_TRUE@ common/libcommon.$(aext) \
@USE_LIBTOOL_TRUE@ complex/libcomplex.$(aext) \
@USE_LIBTOOL_TRUE@ $(am__DEPENDENCIES_1)
@USE_LIBTOOL_TRUE@ fenv/libfenv.$(aext) $(am__DEPENDENCIES_1)
@USE_LIBTOOL_TRUE@libm_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
am_libm_la_OBJECTS =
libm_la_OBJECTS = $(am_libm_la_OBJECTS)
@ -168,7 +168,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = math mathfp common complex machine
DIST_SUBDIRS = math mathfp common complex fenv machine
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
@ -299,10 +299,10 @@ top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = cygnus
@NEWLIB_HW_FP_FALSE@MATHDIR = math
@NEWLIB_HW_FP_TRUE@MATHDIR = mathfp
SUBDIRS = $(MATHDIR) common complex machine
SUBDIRS = $(MATHDIR) common complex fenv machine
libm_la_LDFLAGS = -Xcompiler -nostdlib
@USE_LIBTOOL_FALSE@SUBLIBS = $(MATHDIR)/lib.$(aext) common/lib.$(aext) complex/lib.$(aext) $(LIBM_MACHINE_LIB)
@USE_LIBTOOL_TRUE@SUBLIBS = $(MATHDIR)/lib$(MATHDIR).$(aext) common/libcommon.$(aext) complex/libcomplex.$(aext) $(LIBM_MACHINE_LIB)
@USE_LIBTOOL_FALSE@SUBLIBS = $(MATHDIR)/lib.$(aext) common/lib.$(aext) complex/lib.$(aext) fenv/lib.$(aext) $(LIBM_MACHINE_LIB)
@USE_LIBTOOL_TRUE@SUBLIBS = $(MATHDIR)/lib$(MATHDIR).$(aext) common/libcommon.$(aext) complex/libcomplex.$(aext) fenv/libfenv.$(aext) $(LIBM_MACHINE_LIB)
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libm.la
@USE_LIBTOOL_TRUE@libm_la_SOURCES =
@USE_LIBTOOL_TRUE@libm_la_LIBADD = $(SUBLIBS)

View File

@ -11868,7 +11868,7 @@ fi
ac_config_files="$ac_config_files Makefile math/Makefile mathfp/Makefile common/Makefile complex/Makefile"
ac_config_files="$ac_config_files Makefile math/Makefile mathfp/Makefile common/Makefile complex/Makefile fenv/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@ -12930,6 +12930,7 @@ do
"mathfp/Makefile") CONFIG_FILES="$CONFIG_FILES mathfp/Makefile" ;;
"common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;;
"complex/Makefile") CONFIG_FILES="$CONFIG_FILES complex/Makefile" ;;
"fenv/Makefile") CONFIG_FILES="$CONFIG_FILES fenv/Makefile" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac

View File

@ -62,5 +62,5 @@ fi
AC_SUBST(LIBM_MACHINE_LIB)
AC_CONFIG_FILES([Makefile math/Makefile mathfp/Makefile common/Makefile complex/Makefile])
AC_CONFIG_FILES([Makefile math/Makefile mathfp/Makefile common/Makefile complex/Makefile fenv/Makefile])
AC_OUTPUT

View File

@ -0,0 +1,36 @@
## Process this file with automake to generate Makefile.in
AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
src = feclearexcept.c fe_dfl_env.c fegetenv.c fegetexceptflag.c \
fegetround.c feholdexcept.c feraiseexcept.c fesetenv.c \
fesetexceptflag.c fesetround.c fetestexcept.c feupdateenv.c
libcommon_la_LDFLAGS = -Xcompiler -nostdlib
lib_a_CFLAGS = -fbuiltin -fno-math-errno
if USE_LIBTOOL
noinst_LTLIBRARIES = libcommon.la
libcommon_la_SOURCES = $(src)
noinst_DATA = objectlist.awk.in
else
noinst_LIBRARIES = lib.a
lib_a_SOURCES = $(src)
lib_a_CFLAGS += $(AM_CFLAGS)
noinst_DATA =
endif # USE_LIBTOOL
include $(srcdir)/../../Makefile.shared
CHEWOUT_FILES = feclearexcept.def fegetenv.def \
fegetexceptflag.def fegetround.def feholdexcept.def \
feraiseexcept.def fesetenv.def fesetexceptflag.def fesetround.def \
fetestexcept.def feupdateenv.def
CHAPTERS = fenv.tex
# A partial dependency list.
$(lib_a_OBJECTS): $(srcdir)/../../libc/include/fenv.h

View File

@ -0,0 +1,628 @@
# Makefile.in generated by automake 1.11.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
# Foundation, Inc.
# This Makefile.in 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.
@SET_MAKE@
VPATH = @srcdir@
am__make_dryrun = \
{ \
am__dry=no; \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
*) \
for am__flg in $$MAKEFLAGS; do \
case $$am__flg in \
*=*|--*) ;; \
*n*) am__dry=yes; break;; \
esac; \
done;; \
esac; \
test $$am__dry = yes; \
}
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@USE_LIBTOOL_FALSE@am__append_1 = $(AM_CFLAGS)
DIST_COMMON = $(srcdir)/../../Makefile.shared $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am
subdir = fenv
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../../libtool.m4 \
$(top_srcdir)/../../ltoptions.m4 \
$(top_srcdir)/../../ltsugar.m4 \
$(top_srcdir)/../../ltversion.m4 \
$(top_srcdir)/../../lt~obsolete.m4 \
$(top_srcdir)/../acinclude.m4 $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(SHELL) $(top_srcdir)/../../mkinstalldirs
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LIBRARIES = $(noinst_LIBRARIES)
ARFLAGS = cru
lib_a_AR = $(AR) $(ARFLAGS)
lib_a_LIBADD =
am__objects_1 = lib_a-feclearexcept.$(OBJEXT) \
lib_a-fe_dfl_env.$(OBJEXT) lib_a-fegetenv.$(OBJEXT) \
lib_a-fegetexceptflag.$(OBJEXT) lib_a-fegetround.$(OBJEXT) \
lib_a-feholdexcept.$(OBJEXT) lib_a-feraiseexcept.$(OBJEXT) \
lib_a-fesetenv.$(OBJEXT) lib_a-fesetexceptflag.$(OBJEXT) \
lib_a-fesetround.$(OBJEXT) lib_a-fetestexcept.$(OBJEXT) \
lib_a-feupdateenv.$(OBJEXT)
@USE_LIBTOOL_FALSE@am_lib_a_OBJECTS = $(am__objects_1)
lib_a_OBJECTS = $(am_lib_a_OBJECTS)
LTLIBRARIES = $(noinst_LTLIBRARIES)
libcommon_la_LIBADD =
am__objects_2 = feclearexcept.lo fe_dfl_env.lo fegetenv.lo \
fegetexceptflag.lo fegetround.lo feholdexcept.lo \
feraiseexcept.lo fesetenv.lo fesetexceptflag.lo fesetround.lo \
fetestexcept.lo feupdateenv.lo
@USE_LIBTOOL_TRUE@am_libcommon_la_OBJECTS = $(am__objects_2)
libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS)
libcommon_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libcommon_la_LDFLAGS) $(LDFLAGS) -o $@
@USE_LIBTOOL_TRUE@am_libcommon_la_rpath =
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp =
am__depfiles_maybe =
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(lib_a_SOURCES) $(libcommon_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
DATA = $(noinst_DATA)
ETAGS = etags
CTAGS = ctags
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBM_MACHINE_LIB = @LIBM_MACHINE_LIB@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NEWLIB_CFLAGS = @NEWLIB_CFLAGS@
NM = @NM@
NMEDIT = @NMEDIT@
NO_INCLUDE_LIST = @NO_INCLUDE_LIST@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
READELF = @READELF@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
aext = @aext@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
libm_machine_dir = @libm_machine_dir@
localedir = @localedir@
localstatedir = @localstatedir@
lpfx = @lpfx@
machine_dir = @machine_dir@
mandir = @mandir@
mkdir_p = @mkdir_p@
newlib_basedir = @newlib_basedir@
oext = @oext@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sys_dir = @sys_dir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = cygnus
INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
src = feclearexcept.c fe_dfl_env.c fegetenv.c fegetexceptflag.c \
fegetround.c feholdexcept.c feraiseexcept.c fesetenv.c \
fesetexceptflag.c fesetround.c fetestexcept.c feupdateenv.c
libcommon_la_LDFLAGS = -Xcompiler -nostdlib
lib_a_CFLAGS = -fbuiltin -fno-math-errno $(am__append_1)
@USE_LIBTOOL_TRUE@noinst_LTLIBRARIES = libcommon.la
@USE_LIBTOOL_TRUE@libcommon_la_SOURCES = $(src)
@USE_LIBTOOL_FALSE@noinst_DATA =
@USE_LIBTOOL_TRUE@noinst_DATA = objectlist.awk.in
@USE_LIBTOOL_FALSE@noinst_LIBRARIES = lib.a
@USE_LIBTOOL_FALSE@lib_a_SOURCES = $(src)
#
# documentation rules
#
SUFFIXES = .def .xml
CHEW = ${top_builddir}/../doc/makedoc -f $(top_srcdir)/../doc/doc.str
DOCBOOK_CHEW = ${top_srcdir}/../doc/makedocbook.py
DOCBOOK_OUT_FILES = $(CHEWOUT_FILES:.def=.xml)
DOCBOOK_CHAPTERS = $(CHAPTERS:.tex=.xml)
CLEANFILES = $(CHEWOUT_FILES) $(DOCBOOK_OUT_FILES)
CHEWOUT_FILES = feclearexcept.def fegetenv.def \
fegetexceptflag.def fegetround.def feholdexcept.def \
feraiseexcept.def fesetenv.def fesetexceptflag.def fesetround.def \
fetestexcept.def feupdateenv.def
CHAPTERS = fenv.tex
all: all-am
.SUFFIXES:
.SUFFIXES: .def .xml .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../../Makefile.shared $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus fenv/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --cygnus fenv/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(srcdir)/../../Makefile.shared:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
clean-noinstLIBRARIES:
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
lib.a: $(lib_a_OBJECTS) $(lib_a_DEPENDENCIES) $(EXTRA_lib_a_DEPENDENCIES)
-rm -f lib.a
$(lib_a_AR) lib.a $(lib_a_OBJECTS) $(lib_a_LIBADD)
$(RANLIB) lib.a
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libcommon.la: $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) $(EXTRA_libcommon_la_DEPENDENCIES)
$(libcommon_la_LINK) $(am_libcommon_la_rpath) $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
.c.o:
$(COMPILE) -c $<
.c.obj:
$(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
$(LTCOMPILE) -c -o $@ $<
lib_a-feclearexcept.o: feclearexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.o `test -f 'feclearexcept.c' || echo '$(srcdir)/'`feclearexcept.c
lib_a-feclearexcept.obj: feclearexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feclearexcept.obj `if test -f 'feclearexcept.c'; then $(CYGPATH_W) 'feclearexcept.c'; else $(CYGPATH_W) '$(srcdir)/feclearexcept.c'; fi`
lib_a-fe_dfl_env.o: fe_dfl_env.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fe_dfl_env.o `test -f 'fe_dfl_env.c' || echo '$(srcdir)/'`fe_dfl_env.c
lib_a-fe_dfl_env.obj: fe_dfl_env.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fe_dfl_env.obj `if test -f 'fe_dfl_env.c'; then $(CYGPATH_W) 'fe_dfl_env.c'; else $(CYGPATH_W) '$(srcdir)/fe_dfl_env.c'; fi`
lib_a-fegetenv.o: fegetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.o `test -f 'fegetenv.c' || echo '$(srcdir)/'`fegetenv.c
lib_a-fegetenv.obj: fegetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetenv.obj `if test -f 'fegetenv.c'; then $(CYGPATH_W) 'fegetenv.c'; else $(CYGPATH_W) '$(srcdir)/fegetenv.c'; fi`
lib_a-fegetexceptflag.o: fegetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.o `test -f 'fegetexceptflag.c' || echo '$(srcdir)/'`fegetexceptflag.c
lib_a-fegetexceptflag.obj: fegetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetexceptflag.obj `if test -f 'fegetexceptflag.c'; then $(CYGPATH_W) 'fegetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/fegetexceptflag.c'; fi`
lib_a-fegetround.o: fegetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.o `test -f 'fegetround.c' || echo '$(srcdir)/'`fegetround.c
lib_a-fegetround.obj: fegetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fegetround.obj `if test -f 'fegetround.c'; then $(CYGPATH_W) 'fegetround.c'; else $(CYGPATH_W) '$(srcdir)/fegetround.c'; fi`
lib_a-feholdexcept.o: feholdexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.o `test -f 'feholdexcept.c' || echo '$(srcdir)/'`feholdexcept.c
lib_a-feholdexcept.obj: feholdexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feholdexcept.obj `if test -f 'feholdexcept.c'; then $(CYGPATH_W) 'feholdexcept.c'; else $(CYGPATH_W) '$(srcdir)/feholdexcept.c'; fi`
lib_a-feraiseexcept.o: feraiseexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.o `test -f 'feraiseexcept.c' || echo '$(srcdir)/'`feraiseexcept.c
lib_a-feraiseexcept.obj: feraiseexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feraiseexcept.obj `if test -f 'feraiseexcept.c'; then $(CYGPATH_W) 'feraiseexcept.c'; else $(CYGPATH_W) '$(srcdir)/feraiseexcept.c'; fi`
lib_a-fesetenv.o: fesetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.o `test -f 'fesetenv.c' || echo '$(srcdir)/'`fesetenv.c
lib_a-fesetenv.obj: fesetenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetenv.obj `if test -f 'fesetenv.c'; then $(CYGPATH_W) 'fesetenv.c'; else $(CYGPATH_W) '$(srcdir)/fesetenv.c'; fi`
lib_a-fesetexceptflag.o: fesetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.o `test -f 'fesetexceptflag.c' || echo '$(srcdir)/'`fesetexceptflag.c
lib_a-fesetexceptflag.obj: fesetexceptflag.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetexceptflag.obj `if test -f 'fesetexceptflag.c'; then $(CYGPATH_W) 'fesetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/fesetexceptflag.c'; fi`
lib_a-fesetround.o: fesetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.o `test -f 'fesetround.c' || echo '$(srcdir)/'`fesetround.c
lib_a-fesetround.obj: fesetround.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fesetround.obj `if test -f 'fesetround.c'; then $(CYGPATH_W) 'fesetround.c'; else $(CYGPATH_W) '$(srcdir)/fesetround.c'; fi`
lib_a-fetestexcept.o: fetestexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.o `test -f 'fetestexcept.c' || echo '$(srcdir)/'`fetestexcept.c
lib_a-fetestexcept.obj: fetestexcept.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fetestexcept.obj `if test -f 'fetestexcept.c'; then $(CYGPATH_W) 'fetestexcept.c'; else $(CYGPATH_W) '$(srcdir)/fetestexcept.c'; fi`
lib_a-feupdateenv.o: feupdateenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.o `test -f 'feupdateenv.c' || echo '$(srcdir)/'`feupdateenv.c
lib_a-feupdateenv.obj: feupdateenv.c
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-feupdateenv.obj `if test -f 'feupdateenv.c'; then $(CYGPATH_W) 'feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/feupdateenv.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
check-am:
check: check-am
all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(DATA)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
ctags distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags dvi dvi-am html html-am info \
info-am install install-am install-data install-data-am \
install-dvi install-dvi-am install-exec install-exec-am \
install-html install-html-am install-info install-info-am \
install-man install-pdf install-pdf-am install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
uninstall-am
objectlist.awk.in: $(noinst_LTLIBRARIES)
-rm -f objectlist.awk.in
for i in `ls *.lo` ; \
do \
echo $$i `pwd`/$$i >> objectlist.awk.in ; \
done
.c.def:
$(CHEW) < $< > $*.def || ( rm $*.def && false )
@touch stmp-def
TARGETDOC ?= ../tmp.texi
doc: $(CHEWOUT_FILES)
for chapter in $(CHAPTERS) ; \
do \
cat $(srcdir)/$$chapter >> $(TARGETDOC) ; \
done
.c.xml:
$(DOCBOOK_CHEW) < $< > $*.xml || ( rm $*.xml && false )
@touch stmp-xml
docbook: $(DOCBOOK_OUT_FILES)
for chapter in $(DOCBOOK_CHAPTERS) ; \
do \
${top_srcdir}/../doc/chapter-texi2docbook.py <$(srcdir)/$${chapter%.xml}.tex >../$$chapter ; \
done
# A partial dependency list.
$(lib_a_OBJECTS): $(srcdir)/../../libc/include/fenv.h
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,42 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*
* The implementation must defined FE_DFL_ENV to point to a default
* environment of type fenv_t.
*/
/* Non-static and writable to allow initialization at startup. */
fenv_t __fe_dfl_env = { 0 };
const fenv_t *_fe_dfl_env = &__fe_dfl_env;

View File

@ -0,0 +1,67 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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.
*/
/*
FUNCTION
<<feclearexcept>>---clear floating-point exception
INDEX
feclearexcept
SYNOPSIS
#include <fenv.h>
int feclearexcept(int <[except]>);
Link with -lm.
DESCRIPTION
This method attempts to clear the floating-point exceptions specified
in <[except]>.
RETURNS
If the <[except]> argument is zero or all requested exceptions were
successfully cleared, this method returns zero. Otherwise, a non-zero
value is returned.
PORTABILITY
ANSI C requires <<feclearexcept>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
#include <fenv.h>
#include <errno.h>
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int feclearexcept(int excepts)
{
return (excepts ? -ENOTSUP : 0);
}

View File

@ -0,0 +1,67 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<fegetenv>>---get current floating-point environment
INDEX
fegetenv
SYNOPSIS
#include <fenv.h>
int fegetenv(fenv_t *<[envp]>);
Link with -lm.
DESCRIPTION
This method attempts to return the floating-point environment
in the area specified by <[envp]>.
RETURNS
If floating-point environment was successfully returned, then
this method returns zero. Otherwise, a non-zero value is returned.
PORTABILITY
ANSI C requires <<fegetenv>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int fegetenv(fenv_t *envp)
{
return -ENOTSUP;
}

View File

@ -0,0 +1,68 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<fegetexceptflag>>---get floating-point status flags
INDEX
fegetexceptflag
SYNOPSIS
#include <fenv.h>
int fegetexceptflag(fexcept_t *<[flagp]>, int <[excepts]>);
Link with -lm.
DESCRIPTION
This method attempts to store an implementation-defined representation
of the states of the floating-point status flags specified by <[excepts]>
in the memory pointed to by <[flagp]>.
RETURNS
If the information was successfully returned, this method returns
zero. Otherwise, a non-zero value is returned.
PORTABILITY
ANSI C requires <<fegetexceptflag>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int fegetexceptflag(fexcept_t *flagp, int excepts)
{
return -ENOTSUP;
}

View File

@ -0,0 +1,66 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<fegetround>>---get current rounding direction
INDEX
fegetround
SYNOPSIS
#include <fenv.h>
int fegetround(void);
Link with -lm.
DESCRIPTION
This method returns the current rounding direction.
RETURNS
This method returns the rounding direction, corresponding to the value
of the respective rouding macro. If the current rounding direction cannot
be determined, then a negative value is returned.
PORTABILITY
ANSI C requires <<fegetround>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int fegetround(void)
{
return -ENOTSUP;
}

View File

@ -0,0 +1,70 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<feholdexcept>>---save current floating-point environment
INDEX
feholdexcept
SYNOPSIS
#include <fenv.h>
int feholdexcept(fenv_t *<[envp]>);
Link with -lm.
DESCRIPTION
This method attempts to save the current floating-point environment
in the fenv_t instance pointed to by <[envp]>, clear the floating
point status flags, and then, if supported by the target architecture,
install a "non-stop" (e.g. continue on floating point exceptions) mode
for all floating-point exceptions.
RETURNS
This method will return zero if the non-stop floating-point exception
handler was installed. Otherwise, a non-zero value is returned.
PORTABILITY
ANSI C requires <<feholdexcept>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int feholdexcept(fenv_t *envp)
{
return -ENOTSUP;
}

45
newlib/libm/fenv/fenv.tex Normal file
View File

@ -0,0 +1,45 @@
@node Fenv
@chapter Floating-Point Environment (@file{fenv.h})
This chapter groups the methods used to manipulate the floating-point
status flags. Floating-point operations modify the floating-point
status flags to indicate abnormal result information.
The implementation of these methods is architecture specific.
@menu
* feclearexcept:: Clear floating-point exception
* fegetenv:: Get current floating-point environment
* fegetexceptflag:: Get floating-point status flags
* fegetround:: Get current rounding direction
* feholdexcept:: Save current floating-point environment
* feraiseexcept:: Raise floating-point exception
* fesetenv:: Set current floating-point environment
* fesetexceptflag:: Set floating-point status flags
* fesetround:: Set current rounding direction
* fetestexcept:: Test floating-point exception flags
* feupdateenv:: Update current floating-point environment
@end menu
@page
@include fenv/feclearexcept.def
@page
@include fenv/fegetenv.def
@page
@include fenv/fegetexceptflag.def
@page
@include fenv/fegetround.def
@page
@include fenv/feholdexcept.def
@page
@include fenv/feraiseexcept.def
@page
@include fenv/fesetenv.def
@page
@include fenv/fesetexceptflag.def
@page
@include fenv/fesetround.def
@page
@include fenv/fetestexcept.def
@page
@include fenv/feupdateenv.def

View File

@ -0,0 +1,67 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<feraiseexcept>>---raise floating-point exception
INDEX
feraiseexcept
SYNOPSIS
#include <fenv.h>
int feraiseexcept(int <[excepts]>);
Link with -lm.
DESCRIPTION
This method attempts to raise the floating-point exceptions specified
in <[excepts]>.
RETURNS
If the <[excepts]> argument is zero or all requested exceptions were
successfully raised, this method returns zero. Otherwise, a non-zero
value is returned.
PORTABILITY
ANSI C requires <<feraiseexcept>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int feraiseexcept(int excepts)
{
return (excepts ? -ENOTSUP : 0);
}

View File

@ -0,0 +1,72 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<fesetenv>>---set current floating-point environment
INDEX
fesetenv
SYNOPSIS
#include <fenv.h>
int fesetenv(const fenv_t *<[envp]>);
Link with -lm.
DESCRIPTION
This method attempts to establish the floating-point environment
pointed to by <[envp]>. The argument <[envp]> must point to a
floating-point environment obtained via <<fegetenv>> or <<feholdexcept>>
or a floating-point environment macro such as <<FE_DFL_ENV>>.
It only sets the states of the flags as recorded in its argument, and
does not actually raise the associated floating-point exceptions.
RETURNS
If floating-point environment was successfully established, then
this method returns zero. Otherwise, a non-zero value is returned.
PORTABILITY
ANSI C requires <<fesetenv>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int fesetenv(const fenv_t *envp)
{
return -ENOTSUP;
}

View File

@ -0,0 +1,73 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<fesetexceptflag>>---set floating-point status flags
INDEX
fesetexceptflag
SYNOPSIS
#include <fenv.h>
int fesetexceptflag(const fexcept_t *<[flagp]>, int <[excepts]>);
Link with -lm.
DESCRIPTION
This method attempts to set the floating-point status flags specified
by <[excepts]> to the states indicated by <[flagp]>. The argument
<[flagp]> must point to an fexcept_t instance obtained via calling
<<fegetexceptflag>> with at least the floating-point exceptions specified
by the argument <[excepts]>.
This method does not raise any floating-point exceptions. It only
sets the state of the flags.
RETURNS
If the information was successfully returned, this method returns
zero. Otherwise, a non-zero value is returned.
PORTABILITY
ANSI C requires <<fesetexceptflag>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int fesetexceptflag(const fexcept_t *flagp, int excepts)
{
return -ENOTSUP;
}

View File

@ -0,0 +1,67 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<fesetround>>---set current rounding direction
INDEX
fesetround
SYNOPSIS
#include <fenv.h>
int fesetround(int <[round]>);
Link with -lm.
DESCRIPTION
This method attempts to set the current rounding direction represented
by <[round]>. <[round]> must be the value of one of the
rounding-direction macros.
RETURNS
If the rounding mode was successfully established, this method returns
zero. Otherwise, a non-zero value is returned.
PORTABILITY
ANSI C requires <<fesetround>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int fesetround(int round)
{
return -ENOTSUP;
}

View File

@ -0,0 +1,68 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<fetestexcept>>---test floating-point exception flags
INDEX
fetestexcept
SYNOPSIS
#include <fenv.h>
int fetestexcept(int <[except]>);
Link with -lm.
DESCRIPTION
This method test the current floating-point exceptions to determine
which of those specified in <[except]> are currently set.
RETURNS
This method returns the bitwise-inclusive OR of the floating point
exception macros which correspond to the currently set floating point
exceptions.
PORTABILITY
ANSI C requires <<fetestexcept>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int fetestexcept(int excepts)
{
return 0;
}

View File

@ -0,0 +1,72 @@
/*
(c) Copyright 2019 Joel Sherrill <joel@rtems.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 COPYRIGHT HOLDERS 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
HOLDER 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 <fenv.h>
#include <errno.h>
/*
FUNCTION
<<feupdateenv>>---update current floating-point environment
INDEX
feupdateenv
SYNOPSIS
#include <fenv.h>
int feupdateenv(const fenv_t *<[envp]>);
Link with -lm.
DESCRIPTION
This method attempts to save the currently raised floating point
exceptions in its automatic storage, install the floating point
environment specified by <[envp]>, and raise the saved floating
point exceptions.
The argument <[envp]> must point to a floating-point environment
obtained via <<fegetenv>> or <<feholdexcept>>.
RETURNS
If all actions are completed successfully, then this method returns zero.
Otherwise, a non-zero value is returned.
PORTABILITY
ANSI C requires <<feupdateenv>>.
Not all Newlib targets have a working implementation. Refer to
the file <<sys/fenv.h>> to see the status for your target.
*/
/*
* This is a non-functional implementation that should be overridden
* by an architecture specific implementation in newlib/libm/machine/ARCH.
*/
int feupdateenv(const fenv_t *envp)
{
return -ENOTSUP;
}

View File

@ -7,6 +7,7 @@
<xi:include href="complex.xml"/>
<xi:include href="math.xml"/>
<xi:include href="fenv.xml"/>
<!-- processing should insert index here -->
<index/>

View File

@ -94,6 +94,7 @@ into another language, under the above conditions for modified versions.
@menu
* Math:: The mathematical functions (`math.h').
* Complex:: The mathematical complex functions (`complex.h').
* Fenv:: The floating point environment functions ('fenv.h').
* Reentrancy:: The functions in libm are not reentrant by default.
* Long Double Functions:: The long double function support of libm.
* Document Index::

View File

@ -52,9 +52,10 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(srcdir)/../../../Makefile.shared $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(srcdir)/../../../../mkinstalldirs
DIST_COMMON = $(srcdir)/../../../Makefile.shared INSTALL \
$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/configure $(am__configure_deps) \
$(srcdir)/../../../../mkinstalldirs
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../../../acinclude.m4 \

View File

@ -189,8 +189,8 @@ public:
stack_t altstack;
siginfo_t *sigwait_info;
HANDLE signal_arrived;
HANDLE signalfd_select_wait;
bool will_wait_for_signal;
long __align; /* Needed to align context to 16 byte. */
/* context MUST be aligned to 16 byte, otherwise RtlCaptureContext fails.
If you prepend cygtls members here, make sure context stays 16 byte
aligned. */

View File

@ -1469,14 +1469,6 @@ sigpacket::process ()
if (issig_wait)
{
tls->sigwait_mask = 0;
/* If the catching thread is running select on a signalfd, don't call
the signal handler and don't remove the signal from the queue. */
if (tls->signalfd_select_wait)
{
SetEvent (tls->signalfd_select_wait);
rc = 0;
goto done;
}
goto dosig;
}

View File

@ -37,11 +37,9 @@ details. */
#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
@ -435,6 +433,7 @@ void
_feinitialise (void)
{
unsigned int edx, eax;
extern fenv_t __fe_dfl_env;
/* Check for presence of SSE: invoke CPUID #1, check EDX bit 25. */
eax = 1;
@ -462,6 +461,6 @@ _feinitialise (void)
fedisableexcept (FE_ALL_EXCEPT);
/* Finally cache state as default environment. */
fegetenv (&fe_dfl_env);
fegetenv (&__fe_dfl_env);
}

View File

@ -168,8 +168,12 @@ fhandler_console::set_unit ()
if (created)
con.owner = getpid ();
}
if (!created && shared_console_info && kill (con.owner, 0) == -1)
con.owner = getpid ();
if (!created && shared_console_info)
{
pinfo p (con.owner);
if (!p)
con.owner = getpid ();
}
dev ().parse (devset);
if (devset != FH_ERROR)
@ -304,6 +308,9 @@ void
fhandler_console::set_cursor_maybe ()
{
con.fillin (get_output_handle ());
/* Nothing to do for xterm compatible mode. */
if (wincap.has_con_24bit_colors ())
return;
if (con.dwLastCursorPosition.X != con.b.dwCursorPosition.X ||
con.dwLastCursorPosition.Y != con.b.dwCursorPosition.Y)
{
@ -312,6 +319,25 @@ fhandler_console::set_cursor_maybe ()
}
}
/* Workaround for a bug of windows xterm compatible mode. */
/* The horizontal tab positions are broken after resize. */
static void
fix_tab_position (HANDLE h, SHORT width)
{
char buf[2048] = {0,};
/* Save cursor position */
__small_sprintf (buf+strlen (buf), "\0337");
/* Clear all horizontal tabs */
__small_sprintf (buf+strlen (buf), "\033[3g");
/* Set horizontal tabs */
for (int col=8; col<width; col+=8)
__small_sprintf (buf+strlen (buf), "\033[%d;%dH\033H", 1, col+1);
/* Restore cursor position */
__small_sprintf (buf+strlen (buf), "\0338");
DWORD dwLen;
WriteConsole (h, buf, strlen (buf), &dwLen, 0);
}
bool
fhandler_console::send_winch_maybe ()
{
@ -323,6 +349,8 @@ fhandler_console::send_winch_maybe ()
{
con.scroll_region.Top = 0;
con.scroll_region.Bottom = -1;
if (wincap.has_con_24bit_colors ())
fix_tab_position (get_output_handle (), con.dwWinSize.X);
get_ttyp ()->kill_pgrp (SIGWINCH);
return true;
}
@ -1589,6 +1617,12 @@ static const wchar_t __vt100_conv[31] = {
inline
bool fhandler_console::write_console (PWCHAR buf, DWORD len, DWORD& done)
{
bool need_fix_tab_position = false;
/* Check if screen will be alternated. */
if (wincap.has_con_24bit_colors ()
&& memmem (buf, len*sizeof (WCHAR), L"\033[?1049", 7*sizeof (WCHAR)))
need_fix_tab_position = true;
if (con.iso_2022_G1
? con.vt100_graphics_mode_G1
: con.vt100_graphics_mode_G0)
@ -1607,6 +1641,9 @@ bool fhandler_console::write_console (PWCHAR buf, DWORD len, DWORD& done)
len -= done;
buf += done;
}
/* Call fix_tab_position() if screen has been alternated. */
if (need_fix_tab_position)
fix_tab_position (get_output_handle (), con.dwWinSize.X);
return true;
}

View File

@ -50,7 +50,12 @@ __FLT_TYPE
__FLT_ABI(acosh) (__FLT_TYPE x)
{
int x_class = fpclassify (x);
if (x_class == FP_NAN || x < __FLT_CST(1.0))
if (x_class == FP_NAN)
{
errno = EDOM;
return x;
}
else if (x < __FLT_CST(1.0))
{
errno = EDOM;
return __FLT_NAN;

View File

@ -21,7 +21,7 @@ long double coshl(long double x)
else if (x_class == FP_INFINITE)
{
errno = ERANGE;
return x;
return INFINITY;
}
x = fabsl (x);
if (x > (MAXLOGL + LOGE2L))

View File

@ -243,6 +243,9 @@ long double erfcl(long double a)
if (isinf (a))
return (signbit(a) ? 2.0 : 0.0);
if (isnan (a))
return (a);
x = fabsl (a);
if (x < 1.0L)

View File

@ -216,7 +216,7 @@ long double __lgammal_r(long double x, int* sgngaml)
*sgngaml = 1;
#ifdef NANS
if (isnanl(x))
return(NANL);
return x;
#endif
#ifdef INFINITIES
if (!isfinitel(x))

View File

@ -56,6 +56,8 @@ __FLT_ABI(log) (__FLT_TYPE x)
errno = ERANGE;
return -__FLT_HUGE_VAL;
}
else if (x_class == FP_NAN)
return x;
else if (signbit (x))
{
errno = EDOM;
@ -63,7 +65,5 @@ __FLT_ABI(log) (__FLT_TYPE x)
}
else if (x_class == FP_INFINITE)
return __FLT_HUGE_VAL;
else if (x_class == FP_NAN)
return __FLT_NAN;
return (__FLT_TYPE) __logl_internal ((long double) x);
}

View File

@ -121,9 +121,13 @@ __FLT_ABI(pow) (__FLT_TYPE x, __FLT_TYPE y)
return __FLT_CST(1.0);
else if (x_class == FP_NAN || y_class == FP_NAN)
{
rslt = (signbit(x) ? -__FLT_NAN : __FLT_NAN);
errno = EDOM;
return rslt;
if (x_class == FP_NAN) {
errno = EDOM;
return x;
} else {
errno = EDOM;
return y;
}
}
else if (x_class == FP_ZERO)
{

View File

@ -272,7 +272,7 @@ long double __tgammal_r(long double x, int* sgngaml)
*sgngaml = 1;
#ifdef NANS
if (isnanl(x))
return (NANL);
return x;
#endif
#ifdef INFINITIES
#ifdef NANS
@ -285,6 +285,9 @@ long double __tgammal_r(long double x, int* sgngaml)
return (x);
#endif
#endif
if (x == 0.0L)
return copysignl(HUGE_VALL, x);
q = fabsl(x);
if (q > 13.0L)
@ -299,8 +302,8 @@ long double __tgammal_r(long double x, int* sgngaml)
gsing:
_SET_ERRNO(EDOM);
mtherr("tgammal", SING);
#ifdef INFINITIES
return (INFINITYL);
#ifdef NANS
return (NAN);
#else
return (*sgngaml * MAXNUML);
#endif

View File

@ -1045,7 +1045,9 @@ peek_console (select_record *me, bool)
else if (!PeekConsoleInputW (h, &irec, 1, &events_read) || !events_read)
break;
fh->acquire_input_mutex (INFINITE);
if (fhandler_console::input_winch == fh->process_input_message ())
if (fhandler_console::input_winch == fh->process_input_message ()
&& global_sigs[SIGWINCH].sa_handler != SIG_IGN
&& global_sigs[SIGWINCH].sa_handler != SIG_DFL)
{
set_sig_errno (EINTR);
fh->release_input_mutex ();
@ -1847,80 +1849,6 @@ fhandler_windows::select_except (select_stuff *ss)
return s;
}
static int start_thread_signalfd (select_record *, select_stuff *);
static DWORD WINAPI
thread_signalfd (void *arg)
{
select_signalfd_info *si = (select_signalfd_info *) arg;
bool event = false;
while (!event)
{
sigset_t set = 0;
_cygtls *tls = si->start->tls;
for (select_record *s = si->start; (s = s->next); )
if (s->startup == start_thread_signalfd)
set |= ((fhandler_signalfd *) s->fh)->get_sigset ();
set_signal_mask (tls->sigwait_mask, set);
tls->signalfd_select_wait = si->evt;
sig_dispatch_pending (true);
switch (WaitForSingleObject (si->evt, INFINITE))
{
case WAIT_OBJECT_0:
tls->signalfd_select_wait = NULL;
event = true;
break;
default:
break;
}
if (si->stop_thread)
break;
if (!event)
Sleep (1L);
}
CloseHandle (si->evt);
return 0;
}
static int
start_thread_signalfd (select_record *me, select_stuff *stuff)
{
select_signalfd_info *si;
if ((si = stuff->device_specific_signalfd))
{
me->h = *si->thread;
return 1;
}
si = new select_signalfd_info;
si->start = &stuff->start;
si->stop_thread = false;
si->evt = CreateEventW (&sec_none_nih, TRUE, FALSE, NULL);
si->thread = new cygthread (thread_signalfd, si, "signalfdsel");
me->h = *si->thread;
stuff->device_specific_signalfd = si;
return 1;
}
static void
signalfd_cleanup (select_record *, select_stuff *stuff)
{
select_signalfd_info *si;
if (!(si = stuff->device_specific_signalfd))
return;
if (si->thread)
{
si->stop_thread = true;
SetEvent (si->evt);
si->thread->detach ();
}
delete si;
stuff->device_specific_signalfd = NULL;
}
static int
peek_signalfd (select_record *me, bool)
{
@ -1940,17 +1868,19 @@ verify_signalfd (select_record *me, fd_set *rfds, fd_set *wfds, fd_set *efds)
return peek_signalfd (me, true);
}
extern HANDLE my_pendingsigs_evt;
select_record *
fhandler_signalfd::select_read (select_stuff *stuff)
{
select_record *s = stuff->start.next;
if (!s->startup)
{
s->startup = start_thread_signalfd;
s->startup = no_startup;
s->verify = verify_signalfd;
s->cleanup = signalfd_cleanup;
}
s->peek = peek_signalfd;
s->h = my_pendingsigs_evt; /* wait_sig sets this if signal are pending */
s->read_selected = true;
s->read_ready = false;
return s;

View File

@ -71,12 +71,6 @@ struct select_serial_info: public select_info
select_serial_info (): select_info () {}
};
struct select_signalfd_info: public select_info
{
HANDLE evt;
select_signalfd_info (): select_info () {}
};
class select_stuff
{
public:
@ -97,7 +91,6 @@ public:
select_fifo_info *device_specific_fifo;
select_socket_info *device_specific_socket;
select_serial_info *device_specific_serial;
select_signalfd_info *device_specific_signalfd;
bool test_and_set (int, fd_set *, fd_set *, fd_set *);
int poll (fd_set *, fd_set *, fd_set *);
@ -110,8 +103,8 @@ public:
device_specific_pipe (NULL),
device_specific_fifo (NULL),
device_specific_socket (NULL),
device_specific_serial (NULL),
device_specific_signalfd (NULL) {}
device_specific_serial (NULL)
{}
};
extern "C" int cygwin_select (int , fd_set *, fd_set *, fd_set *,

View File

@ -606,7 +606,6 @@ sigwait_common (const sigset_t *set, siginfo_t *info, PLARGE_INTEGER waittime)
__try
{
set_signal_mask (_my_tls.sigwait_mask, *set);
_my_tls.signalfd_select_wait = NULL;
sig_dispatch_pending (true);
switch (cygwait (NULL, waittime,

View File

@ -57,6 +57,9 @@ _cygtls NO_COPY *_sig_tls;
Static HANDLE my_sendsig;
Static HANDLE my_readsig;
/* Used in select if a signalfd is part of the read descriptor set */
HANDLE NO_COPY my_pendingsigs_evt;
/* Function declarations */
static int __reg1 checkstate (waitq *);
static __inline__ bool get_proc_lock (DWORD, DWORD);
@ -455,6 +458,10 @@ sigproc_init ()
}
ProtectHandle (my_readsig);
myself->sendsig = my_sendsig;
my_pendingsigs_evt = CreateEvent (NULL, TRUE, FALSE, NULL);
if (!my_pendingsigs_evt)
api_fatal ("couldn't create pending signal event, %E");
/* sync_proc_subproc is used by proc_subproc. It serializes
access to the children and proc arrays. */
sync_proc_subproc.init ("sync_proc_subproc");
@ -1398,6 +1405,16 @@ wait_sig (VOID *)
qnext->si.si_signo = 0;
}
}
/* At least one signal still queued? The event is used in select
only, and only to decide if WFMO should wake up in case a
signalfd is waiting via select/poll for being ready to read a
pending signal. This method wakes up all threads hanging in
select and having a signalfd, as soon as a pending signal is
available, but it's certainly better than constant polling. */
if (sigq.start.next)
SetEvent (my_pendingsigs_evt);
else
ResetEvent (my_pendingsigs_evt);
if (pack.si.si_signo == SIGCHLD)
clearwait = true;
}

View File

@ -29,10 +29,10 @@
//; $tls::psigwait_info = 2852;
//; $tls::signal_arrived = -9844;
//; $tls::psignal_arrived = 2856;
//; $tls::signalfd_select_wait = -9840;
//; $tls::psignalfd_select_wait = 2860;
//; $tls::will_wait_for_signal = -9836;
//; $tls::pwill_wait_for_signal = 2864;
//; $tls::will_wait_for_signal = -9840;
//; $tls::pwill_wait_for_signal = 2860;
//; $tls::__align = -9836;
//; $tls::p__align = 2864;
//; $tls::context = -9832;
//; $tls::pcontext = 2868;
//; $tls::thread_id = -9084;
@ -91,10 +91,10 @@
#define tls_psigwait_info (2852)
#define tls_signal_arrived (-9844)
#define tls_psignal_arrived (2856)
#define tls_signalfd_select_wait (-9840)
#define tls_psignalfd_select_wait (2860)
#define tls_will_wait_for_signal (-9836)
#define tls_pwill_wait_for_signal (2864)
#define tls_will_wait_for_signal (-9840)
#define tls_pwill_wait_for_signal (2860)
#define tls___align (-9836)
#define tls_p__align (2864)
#define tls_context (-9832)
#define tls_pcontext (2868)
#define tls_thread_id (-9084)

View File

@ -29,10 +29,10 @@
//; $tls::psigwait_info = 4144;
//; $tls::signal_arrived = -8648;
//; $tls::psignal_arrived = 4152;
//; $tls::signalfd_select_wait = -8640;
//; $tls::psignalfd_select_wait = 4160;
//; $tls::will_wait_for_signal = -8632;
//; $tls::pwill_wait_for_signal = 4168;
//; $tls::will_wait_for_signal = -8640;
//; $tls::pwill_wait_for_signal = 4160;
//; $tls::__align = -8632;
//; $tls::p__align = 4168;
//; $tls::context = -8624;
//; $tls::pcontext = 4176;
//; $tls::thread_id = -7328;
@ -91,10 +91,10 @@
#define tls_psigwait_info (4144)
#define tls_signal_arrived (-8648)
#define tls_psignal_arrived (4152)
#define tls_signalfd_select_wait (-8640)
#define tls_psignalfd_select_wait (4160)
#define tls_will_wait_for_signal (-8632)
#define tls_pwill_wait_for_signal (4168)
#define tls_will_wait_for_signal (-8640)
#define tls_pwill_wait_for_signal (4160)
#define tls___align (-8632)
#define tls_p__align (4168)
#define tls_context (-8624)
#define tls_pcontext (4176)
#define tls_thread_id (-7328)

View File

@ -101,7 +101,7 @@ cygpath.exe: CYGWIN_LDFLAGS += -lcygwin -luserenv -lntdll
ps.exe: CYGWIN_LDFLAGS += -lcygwin -lpsapi -lntdll
strace.exe: MINGW_LDFLAGS += -lntdll
ldd.exe:CYGWIN_LDFLAGS += -lpsapi
ldd.exe:CYGWIN_LDFLAGS += -lpsapi -lntdll
pldd.exe: CYGWIN_LDFLAGS += -lpsapi
minidumper.exe: CYGWIN_LDFLAGS += -ldbghelp

View File

@ -39,6 +39,7 @@
#define _WIN32_WINNT 0x0a00
#include <windows.h>
#include <winternl.h>
#include <imagehlp.h>
#include <psapi.h>
@ -55,6 +56,7 @@ struct option longopts[] =
const char *opts = "dhruvV";
static int process_file (const wchar_t *);
static void *drive_map;
static int
error (const char *fmt, ...)
@ -152,6 +154,32 @@ get_module_filename (HANDLE hp, HMODULE hm)
return buf;
}
static BOOL
GetFileNameFromHandle(HANDLE hFile, WCHAR pszFilename[MAX_PATH+1])
{
BOOL result = FALSE;
ULONG len = 0;
OBJECT_NAME_INFORMATION *ntfn = (OBJECT_NAME_INFORMATION *) alloca (65536);
NTSTATUS status = NtQueryObject (hFile, ObjectNameInformation,
ntfn, 65536, &len);
if (NT_SUCCESS (status))
{
PWCHAR win32path = ntfn->Name.Buffer;
win32path[ntfn->Name.Length / sizeof (WCHAR)] = L'\0';
/* NtQueryObject returns a native NT path. (Try to) convert to Win32. */
if (!drive_map)
drive_map = (void *) cygwin_internal (CW_ALLOC_DRIVE_MAP);
if (drive_map)
win32path = (PWCHAR) cygwin_internal (CW_MAP_DRIVE_MAP, drive_map,
win32path);
pszFilename[0] = L'\0';
wcsncat (pszFilename, win32path, MAX_PATH);
result = TRUE;
}
return result;
}
static wchar_t *
load_dll (const wchar_t *fn)
{
@ -215,6 +243,7 @@ start_process (const wchar_t *fn, bool& isdll)
struct dlls
{
LPVOID lpBaseOfDll;
HANDLE hFile;
struct dlls *next;
};
@ -256,7 +285,17 @@ print_dlls (dlls *dll, const wchar_t *dllfn, const wchar_t *process_fn)
char *fn;
wchar_t *fullpath = get_module_filename (hProcess, (HMODULE) dll->lpBaseOfDll);
if (!fullpath)
fn = strdup ("???");
{
// if no path found yet, try getting it from an open handle to the DLL
wchar_t dllname[MAX_PATH+1];
if (GetFileNameFromHandle (dll->hFile, dllname))
{
fn = tocyg (dllname);
saw_file (basename (fn));
}
else
fn = strdup ("???");
}
else if (dllfn && wcscmp (fullpath, dllfn) == 0)
{
free (fullpath);
@ -340,6 +379,7 @@ report (const char *in_fn, bool multiple)
case LOAD_DLL_DEBUG_EVENT:
dll_last->next = (dlls *) malloc (sizeof (dlls));
dll_last->next->lpBaseOfDll = ev.u.LoadDll.lpBaseOfDll;
dll_last->next->hFile = ev.u.LoadDll.hFile;
dll_last->next->next = NULL;
dll_last = dll_last->next;
break;
@ -423,6 +463,8 @@ main (int argc, char **argv)
while ((fn = *argv++))
if (report (fn, multiple))
ret = 1;
if (drive_map)
cygwin_internal (CW_FREE_DRIVE_MAP, drive_map);
exit (ret);
}

View File

@ -266,8 +266,8 @@ main (int argc, char *argv[])
(PVOID) &stodi, sizeof stodi, NULL);
if (!NT_SUCCESS (status))
fprintf (stderr,
"NtQuerySystemInformation(SystemTimeOfDayInformation), "
"status %#010x\n", status);
"NtQuerySystemInformation(SystemTimeOfDayInformation), "
"status %#010x\n", (unsigned int) status);
boot_time = to_time_t ((FILETIME*)&stodi.BootTime);
}