summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Cygwin: support exFAT and fix remote FAT/FAT32 recognitionCorinna Vinschen2018-12-234-1/+12
| | | | | | | Newer FAT32 and exFAT add FILE_SUPPORTS_ENCRYPTION to their flags which wasn't handled by Cygwin yet. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: wincap: add wincap_10_1709, add has_posix_file_info itemCorinna Vinschen2018-12-232-6/+38
| | | | | | | | | | | | Various new file info class members adding important POSIX semantics have been added with W10 1709. We may want to utilize them, so add a matching wincaps. Rearrange checking the W10 build number to prefer the latest builds over the older builds. Rename wincap_10 to wincap_10_1507 for enhanced clarity. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: ntdll.h: Update _FILE_INFORMATION_CLASSCorinna Vinschen2018-12-231-309/+348
| | | | | | | | | | | | - Add missing members added in later OS versions - Rearrange accompanying FILE_foo_INFORMATION structs ordered by info class - Add promising FILE_foo_INFORMATION structs of later Windows 10 releases plus accompanying enums - Drop "Checked on 64 bit" comments since that's self-evident these days Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* RTEMS: Use __uint64_t for __ino_tSebastian Huber2018-12-201-1/+1
| | | | | | | FreeBSD uses a 64-bit ino_t since 2017-05-23. We need this for the pipe() support in libbsd. Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* Plug routing sysctl leaks.markj2018-12-201-1/+5
| | | | | | | | | | | | Various structures exported by sysctl_rtsock() contain padding fields which were not being zeroed. Reported by: Thomas Barabosch, Fraunhofer FKIE Reviewed by: ae MFC after: 3 days Security: kernel memory disclosure Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D18333
* Cygwin: fix heap allocation on WOW64 and /3GB enabled 32 bit machinesCorinna Vinschen2018-12-191-11/+17
| | | | | | | | | The check for the TEB being allocated beyond the first 2GB area is not valid anymore. At least on W10 WOW64, the TEB is allocated in the lower 2GB even in large-address aware executables. Use VirtualQuery instead. It fails for invalid addresses so that's a simple enough test. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* nano-vfprintf_float.c: Fix check if negative for nans.Jon Beniston2018-12-131-1/+2
|
* Fix powf overflow handling in non-nearest rounding modeSzabolcs Nagy2018-12-101-0/+10
| | | | | | | | | | | | | | | | | | | | | The threshold value at which powf overflows depends on the rounding mode and the current check did not take this into account. So when the result was rounded away from zero it could become infinity without setting errno to ERANGE. Example: pow(0x1.7ac7cp+5, 23) is 0x1.fffffep+127 + 0.1633ulp If the result goes above 0x1.fffffep+127 + 0.5ulp then errno is set, which is fine in nearest rounding mode, but powf(0x1.7ac7cp+5, 23) is inf in upward rounding mode powf(-0x1.7ac7cp+5, 23) is -inf in downward rounding mode and the previous implementation did not set errno in these cases. The fix tries to avoid affecting the common code path or calling a function that may introduce a stack frame, so float arithmetics is used to check the rounding mode and the threshold is selected accordingly.
* sys/time.h: Remove KASSERTSebastian Huber2018-12-041-12/+0
| | | | | | The KASSERT is only used by the FreeBSD kernel. Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* Ensure that all values of ns, us and ms workimp2018-12-041-7/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | for {n,u,m}stosbt Integer overflows and wrong constants limited the accuracy of these functions and created situatiosn where sbttoXs(Xstosbt(Y)) != Y. This was especailly true in the ns case where we had millions of values that were wrong. Instead, used fixed constants because there's no way to say ceil(X) for integer math. Document what these crazy constants are. Also, use a shift one fewer left to avoid integer overflow causing incorrect results, and adjust the equasion accordingly. Document this. Allow times >= 1s to be well defined for these conversion functions (at least the Xstosbt). There's too many users in the tree that they work for >= 1s. This fixes a failure on boot to program firmware on the mlx4 NIC. There was a msleep(1000) in the code. Prior to my recent rounding changes, msleep(1000) worked, but msleep(1001) did not because the old code rounded to just below 2^64 and the new code rounds to just above it (overflowing, causing the msleep(1000) to really sleep 1ms). A test program to test all cases will be committed shortly. The test exaustively tries every value (thanks to bde for the test). Sponsored by: Netflix, Inc Differential Revision: https://reviews.freebsd.org/D18051
* When converting ns,us,ms to sbt, return the ceil()imp2018-12-041-3/+7
| | | | | | | | | | | of the result rather than the floor(). Returning the floor means that sbttoX(Xtosbt(y)) != y for almost all values of y. In practice, this results in a difference of at most 1 in the lsb of the sbintime_t. This difference is meaningless for all current users of these functions, but is important for the newly introduced sysctl conversion routines which implicitly rely on the transformation being idempotent. Sponsored by: Netflix, Inc
* Correct a misplaced closing paren.ian2018-12-041-3/+3
| | | | | Does not affect the result, but does clarify (at least for me) that the multiplication happens before the shift.
* sys: further adoption of SPDX licensing ID tags.pfg2018-12-041-0/+2
| | | | | | | | | | | | | | Mainly focus on files that use BSD 3-Clause license. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Special thanks to Wind River for providing access to "The Duke of Highlander" tool: an older (2014) run over FreeBSD tree was useful as a starting point.
* Add inline functions to convert between sbintime_tian2018-12-041-7/+52
| | | | | | | | | | | | and decimal time units. Use them in some existing code that is vulnerable to roundoff errors. The existing constant SBT_1NS is a honeypot, luring unsuspecting folks into writing code such as long_timeout_ns*SBT_1NS to generate the argument for a sleep call. The actual value of 1ns in sbt units is ~4.3, leading to a large roundoff error giving a shorter sleep than expected when multiplying by the trucated value of 4 in SBT_1NS. (The evil honeypot aspect becomes clear after you waste a whole day figuring out why your sleeps return early.)
* Renumber copyright clause 4imp2018-12-041-1/+1
| | | | | | | | | Renumber cluase 4 to 3, per what everybody else did when BSD granted them permission to remove clause 3. My insistance on keeping the same numbering for legal reasons is too pedantic, so give up on that point. Submitted by: Jan Schaumann <jschauma@stevens.edu> Pull Request: https://github.com/freebsd/freebsd/pull/96
* Cygwin: mkvers: fix a bug in sed statementCorinna Vinschen2018-12-011-1/+2
| | | | | | | | | | | | While reformatting the script, backticks `` were replaced with brackets $(). This in turn invalidated the \\( ... \\) expressions in the sed script because backslash resolution in $() works differently from backslash resolution in ``. Only a single backslash is valid now. While at it, fix up the uname(2) date representation when building a snapshot. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: clocks: fix a hang on pre-Windows 10 machinesCorinna Vinschen2018-12-013-50/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | when calling clocks too early in DLL init, the vtables are not correctly set up for some reason. Calls to init() from now() fail because the init pointer in the vtable is NULL. Real life example is mintty which runs into a minor problem at startup, triggering a system_printf call. Strace is another problem, it's called the first time prior to any class initialization. Workaround is to make sure that no virtual methods are called in an early stage. Make init() non-virtual and convert resolution() to a virtual method instead. Add a special non-virtual clk_monotonic_t::strace_usecs. While at it: - Inline internal-only methods. - Drop the `inited' member. Convert period/ticks_per_sec toa union. Initialize period/ticks_per_sec via InterlockeExchange64. - Fix GetTickCount64 usage. No, it's not returning ticks but milliseconds since boot (unbiased). - Fix comment indentation. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* fix version typoMark Geisert2018-12-011-1/+1
|
* Cygwin: clocks: use either tickcount or tick periodCorinna Vinschen2018-11-292-15/+26
| | | | | | | Use whatever native unit the system provides for the resolution of a timer to avoid rounding problems Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* stdio.h: Expose cuserid with __GNU_VISIBLECorinna Vinschen2018-11-291-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: document latest changesCorinna Vinschen2018-11-292-0/+46
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: implement extensible clock interfaceCorinna Vinschen2018-11-2920-295/+539
| | | | | | | | | | | | | | | | | | | | | | | | | | - Drop hires_[nm]s clocks, rename hires.h to clock.h. - Implement clk_t class as an extensible clock class in new file clock.cc. - Introduce get_clock(clock_id) returning a pointer to the clk_t instance for clock_id. Provide the following methods along the lines of the former hires classes: void clk_t::nsecs (struct timespec *); ULONGLONG clk_t::nsecs (); LONGLONG clk_t::usecs (); LONGLONG clk_t::msecs (); void clk_t::resolution (struct timespec *); - Add CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_RAW, CLOCK_MONOTONIC_COARSE and CLOCK_BOOTTIME clocks. - Allow clock_nanosleep, pthread_condattr_setclock and timer_create to use all new clocks (both clocks should be usable with a small tweak, though). - Bump DLL major version to 2.12. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* time.h: Introduce Linux-specific CLOCK id valuesCorinna Vinschen2018-11-291-4/+18
| | | | | | | | | | | | | | | - Add CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_RAW, CLOCK_MONOTONIC_COARSE and CLOCK_BOOTTIME - Guard new values with __GNU_VISIBLE - Add CLOCK_REALTIME_COARSE as (clockid_t) 0 for simplicity (It allows to have all values < 8 and so be used as array index into an array of clocks) - Fix macro bracketing Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: timers: clock_setres: make no-opCorinna Vinschen2018-11-291-36/+2
| | | | | | | | clock_setres is a questionable function only existing on QNX. Disable the function, just return success for CLOCK_REALTIME to maintain backward compatibility. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: pthread_cond_timedwait: make sure to wait until abstime finishesCorinna Vinschen2018-11-291-8/+16
|
* Cygwin: timers: use spinlock to prime hires_ns thread-safeCorinna Vinschen2018-11-262-15/+13
| | | | | | | | The current method to make hires_ns priming thread-safe isn't thread-safe. Rather than hoping that running the thread in TIME_CRITICAL priority is doing the right thing, use a spinlock. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: timers: drop error handling for Windows perf timer functionsCorinna Vinschen2018-11-261-30/+7
| | | | | | | Per MSDN, the perf timer functions always succeed on Windows XP or later. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: timers: Simplify hires_ms and hires_nsCorinna Vinschen2018-11-262-11/+2
| | | | | | Drop hires_base and move inited into hires_ns. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: spinlock: remove useless get_ll callCorinna Vinschen2018-11-261-1/+1
| | | | | | | LARGE_INTEGER has QuadPart anyway, no reason to compute the 64 bit value from HighPart and LowPart. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Builtin enable return code with SYS_EXIT_EXTENDEDMatthew Malcomson2018-11-261-19/+43
| | | | | | | A previous commit introduced the ability to use the semi-hosting SYS_EXIT_EXTENDED operation to libgloss, this commit adds the same ability to the sys/arm/ backend so that building newlib only will provide the same capabilities.
* Add libgloss install-pdf and install-html targets.Jim Wilson2018-11-202-1/+30
| | | | | | | | | | | | | | The toplevel makefile used by binutils/gcc/newlib/etc has install-pdf and install-html targets, but they fail because libgloss doesn't support them. Tested with an arm-eabi combined tree build and install, and verifying that the install-pdf and install-html targets now work, and that the pdf and html doc files are now in the install tree. libgloss/ * Makefile.in (install-html, install-pdf): New. * doc/Makefile.in (htmldir, pdfdir): New. (porting.ps): Delete white space on blank line. (install-pdf, install-html): New.
* Enable return code with semi-hosting SYS_EXIT_EXTENDEDMatthew Malcomson2018-11-192-22/+20
| | | | | | | | | | | | | | | | | | | | | | | The _exit function currently passes -1 as a "sig" to the _kill function as an invalid signal number so that _kill can distinguish between an abort and a standard exit. For boards using the SYS_EXIT_EXTENDED semi-hosting operation to return a status code, this means that the "status" paramter to _exit is ignored and the return code is always -1. https://developer.arm.com/docs/100863/latest/semihosting-operations/sys_exit_extended-0x20 This patch puts shared code between _kill and _exit into a new function _kill_shared that takes the semi-hosting "reason" to use (if semi-hosting is available) as an argument. For semi-hosting _kill_shared provides that "reason". Without the "sig" argument being used to distinguish between a normal and abnormal exit, the _exit function can provide the return code to be used if the SYS_EXIT_EXTENDED operation is available. Hence the exit code can be returned.
* Fix issue with dst bias in memsetWilco Dijkstra2018-11-081-0/+1
| | | | | | | | | | | | This patch fixes an issue in the previous memset loop change. If the zva size is >= 256 and there are more than 64 bytes left in the tail, we could enter the loop and thus need to rebias dst by 32 as well. Since no known CPUs use this size this can't be tested natively, so I've tested it on a simulator initialized with a large zva size. --
* Cygwin: Bump DLL version to 2.11.3Corinna Vinschen2018-11-081-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix v850 target for RTEMScygwin-2_11_2-releaseSebastian Huber2018-11-081-1/+1
| | | | | | | | | | | | | | | Do not define __ATTRIBUTE_IMPURE_PTR__ for RTMES on the v850 target. The previous definition lead to the following linker error in combination with -fdata-sections: relocation truncated to fit: R_V810_GPWLO_1 against symbol `_global_impure_ptr' defined in .rodata._global_impure_ptr section in libc.a(lib_a-impure.o) relocation truncated to fit: R_V810_GPWLO_1 against symbol `_impure_ptr' defined in .data._impure_ptr section in libc.a(lib_a-impure.o) Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* RTEMS: Avoid <machine/param.h> in <sys/_cpuset.h>Sebastian Huber2018-11-081-2/+5
| | | | | | | | The <machine/param.h> header file exposes some unrelated stuff not covered by C or POSIX. Avoid its use in <sys/_cpuset.h> since it is included in <rtems.h>. Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* Adjust writeback in non-zero memsetWilco Dijkstra2018-11-061-3/+3
| | | | | | | | This fixes an ineffiency in the non-zero memset. Delaying the writeback until the end of the loop is slightly faster on some cores - this shows ~5% performance gain on Cortex-A53 when doing large non-zero memsets. Tested against the GLIBC testsuite.
* Cygwin: honor SOCK_NONBLOCK/SOCK_CLOEXEC in socket(2)/socketpair(2)Corinna Vinschen2018-11-052-6/+14
| | | | | | | | | | | | | | | fhandler_socket_wsock::set_socket_handle calls set_flags after setting the O_NONBLOCK/O_CLOEXEC flags, thus overwriting them. It also turns out that fhandler_socket_wsock::init_events is called too late. The inheritence flags are changed before creating the socket event handling objects. Thus, inheritence flags for those objects are wrong with SOCK_CLOEXEC. Fix this by reordering the calls and setting the file flags through fhandler_base::set_flags. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* newlib/configure.host: Set have_init_fini to no for OpenRISCStafford Horne2018-11-051-0/+1
| | | | | | | | The new GCC port for OpenRISC will use the init_fini_array only and not provide the init() and fini() functions. Disable the function usage by default as its no longer needed. Signed-off-by: Stafford Horne <shorne@gmail.com>
* Initialize SVE system registers.Tamar Christina2018-10-311-0/+27
| | | | | | | | | This patch initializes the SVE system registers if available and initializes the vector length to the maximum supported. This is done according to the SVE specification [1]. [1] https://developer.arm.com/docs/ddi0584/latest/arm-architecture-reference-manual-supplement-the-scalable-vector-extension-sve-for-armv8-a
* Cygwin: fix memory corruption/SEGV if certain socket functions failCorinna Vinschen2018-10-295-14/+8
| | | | | | | | | | | | | | | | | | Regression introduced with 2.11.0: The failure paths in socket, socketpair and accept4 functions and methods accidentally release *unused* cygheap_fdmanip objects. The subsequently called dtable::release method was designed to be called for *used* cygheap_fdmanip objects only. Using them on unused objects leads to NULL pointer member dereferencing. Worse, the inet/local accept4 methods only release the cygheap_fdmanip object but neglect to delete the just created fhandler_socket_* object. Fix this by removing the erroneous release calls in the aforementioned failure paths and delete the fhandler_socket_* object in accept4 instead. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Cygwin: Fix cygheap corruption caused by cloned atomic bufferDavid McFarland2018-10-292-0/+5
| | | | | | | The fhandler_base_overlapped::copyto clears atomic_write_buf on the clone, but none of the derived classes were doing this. This allowed the destructor to double-free the buffer and corrupt cygheap. Clear atomic_write_buf in copyto of all derived classes.
* Fix posix_memalign() attributesSebastian Huber2018-10-221-2/+2
| | | | | | | | | | | The malloc, alloc_size and alloc_aligned attributes must be only used in case the function returns the pointer to the allocated memory. See also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87683 Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* RTEMS: Use function and data sectionsSebastian Huber2018-10-221-0/+1
| | | | Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* newlib/libc/sys/rtems/include/machine/param.h: Add _KERNEL to stop method ↵Joel Sherrill2018-10-181-0/+3
| | | | | | | | | | | | | leakage The following FreeBSD kernel methods are not in any standard and prototypes/definitions were leaking into application space: + round_page() + trunc_page() + atop() + ptoa() + pgtok()
* Improve performance of strstrWilco Dijkstra2018-10-181-96/+127
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | v3: Add support for read ahead using strnlen, giving an additional 25% speedup on large inputs (both short and long needles). This patch significantly improves performance of strstr by using Sunday's Quick-Search algorithm. Due to its simplicity it has the best average performance of string matching algorithms on almost all inputs. It uses a bad-character shift table to skip past mismatches. The needle length is limited to 254 - this reduces the shift table memory 4 to 8 times, lowering preprocessing overhead and minimizing cache effects. The limit also implies its worst-case performance is linear. Larger needles are processed by the Two-Way algorithm. The macro AVAILABLE has been improved to use strnlen to read the input in chunks. This results in a 2.5 times speedup for large needles, reducing the performance drop when the Quick-Search algorithm can't be used. The code for 1-4 byte needles has been simplified and now uses unsigned char. Since the optimized code relies on 8-bit chars, we defer to the size-optimized implementation if CHAR_BIT > 8. The performance gain of finding a set of randomly chosen words of size 8 in 256 bytes of English text is 14 times on AArch64. For longer haystacks the gain is well over 20 times. The size-optimized strstr has also been rewritten from scratch to improve performance. On the same test the performance gain is 69%. Tested against GLIBC testsuite, randomized tests and the GNULIB strstr test (https://git.savannah.gnu.org/cgit/gnulib.git/tree/tests/test-strstr.c). --
* newlib/libc/ctype/jp2uc.c: Declare "cs" variable as "const char *"Christophe Lyon2018-10-111-2/+2
| | | | | Instead of "char *" to avoid compiler warnings. This is OK because "cs" is only used as input of strcmp.
* Add generic implementation of fdopendir()Sebastian Huber2018-10-111-8/+21
| | | | Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* Add generic implementation of dirfd()Sebastian Huber2018-10-113-12/+56
| | | | | | | | Use existing HAVE_OPENDIR define to determine if a generic implementation should be provided. Cygwin for example has its own implementation of opendir() and dirfd(). Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* RTEMS: Add struct dirent::d_type memberSebastian Huber2018-10-111-27/+98
| | | | | | | This is used by the file system support of libstdc++ for example. Use content from latest FreeBSD <sys/dirent.h> Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>