Commit Graph

7892 Commits

Author SHA1 Message Date
Ed Maste
6ee0db8b76 Support a.out format in nlist only on i386
i386 is the only current FreeBSD architecture that ever used a.out
format.

Reviewed by:	kib
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D4687
2015-12-22 20:36:14 +00:00
Ed Schouten
459d04a5ee Let tsearch()/tdelete() use an AVL tree.
The existing implementations of POSIX tsearch() and tdelete() don't
attempt to perform any balancing at all. Testing reveals that inserting
100k nodes into a tree sequentially takes approximately one minute on my
system.

Though most other BSDs also don't use any balanced tree internally, C
libraries like glibc and musl do provide better implementations. glibc
uses a red-black tree and musl uses an AVL tree.

Red-black trees have the advantage over AVL trees that they only require
O(1) rotations after insertion and deletion, but have the disadvantage
that the tree has a maximum depth of 2*log2(n) instead of 1.44*log2(n).
My take is that it's better to focus on having a lower maximum depth,
for the reason that in the case of tsearch() the invocation of the
comparator likely dominates the running time.

This change replaces the tsearch() and tdelete() functions by versions
that create an AVL tree. Compared to musl's implementation, this version
is different in two different ways:

- We don't keep track of heights; just balances. This is sufficient.
  This has the advantage that it reduces the number of nodes that are
  being accessed. Storing heights requires us to also access all of the
  siblings along the path.

- Don't use any recursion at all. We know that the tree cannot 2^64
  elements in size, so the height of the tree can never be larger than
  96. Use a 128-bit bitmask to keep track of the path that is computed.
  This allows us to iterate over the same path twice, meaning we can
  apply rotations from top to bottom.

Inserting 100k nodes into a tree now only takes 0.015 seconds. Insertion
seems to be twice as fast as glibc, whereas deletion has about the same
performance. Unlike glibc, it uses a fixed amount of memory.

I also experimented with both recursive and iterative bottom-up
implementations of the same algorithm. This iterative top-down version
performs similar to the recursive bottom-up version in terms of speed
and code size.

For some reason, the iterative bottom-up algorithm was actually 30%
faster for deletion, but has a quadratic memory complexity to keep track
of all the parent pointers.

Reviewed by:	jilles
Obtained from:	https://github.com/NuxiNL/cloudlibc
Differential Revision:	https://reviews.freebsd.org/D4412
2015-12-22 18:12:11 +00:00
Hajimu UMEMOTO
eedae89765 We don't need to use a temporary buffer, here.
MFC after:	1 week
2015-12-22 12:01:06 +00:00
Hajimu UMEMOTO
bf23199477 Use _map_v4v6_address().
MFC after:	1 week
2015-12-21 17:54:23 +00:00
Hajimu UMEMOTO
86acfcf878 Simplify _map_v4v6_address().
Suggested by:	hrs
MFC after:	1 week
2015-12-21 16:55:36 +00:00
Hajimu UMEMOTO
e85324c92f If we end up following a CNAME chain that does not find
any data return that instead of internal error.

PR:		156684
Obtained from:	NetBSD
MFC after:	1 week
2015-12-21 11:24:14 +00:00
Jilles Tjoelker
59797edfd8 libc: Use namespace.h in a few more files.
libc now no longer calls fstat(), socketpair() and wait(), only the
underscore-prefixed versions (_waitpid() instead of wait()).
2015-12-20 23:05:20 +00:00
Hajimu UMEMOTO
b1f9559ae4 addrinfo.ai_family is an address family, not a protocol family.
PR:		162434
MFC after:	1 week
2015-12-20 15:18:50 +00:00
Jilles Tjoelker
11022e84d8 clock_gettime(2),gettimeofday(2): Remove [EFAULT] error.
Depending on system configuration and parameters, clock_gettime() and
gettimeofday() may not be system calls. If so, passing an invalid pointer
will cause a signal and not an [EFAULT] error.

From a standards perspective, this is OK since passing an invalid pointer is
undefined behaviour.

MFC after:	1 week
2015-12-20 15:11:11 +00:00
Konstantin Belousov
af98578a60 Fix lockf(3) cancellation behaviour.
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2015-12-20 11:55:39 +00:00
Hajimu UMEMOTO
844eacfe0f Use _map_v4v6_address().
Suggested by:	hrs
MFC after:	1 week
2015-12-18 17:57:31 +00:00
Hajimu UMEMOTO
b848a37d4e Add AI_V4MAPPED and AI_ALL support for getaddrinfo(3).
PR:		198092
MFC after:	1 week
2015-12-18 17:53:18 +00:00
Enji Cooper
7d5b6ed91d Iterate down lib/libc/tests/nss...
MFC after: 1 week
X-MFC with: r292323
Sponsored by: EMC / Isilon Storage Division
2015-12-16 08:25:12 +00:00
Enji Cooper
08ca345cfd Integrate tools/regression/lib/libc/nss into the FreeBSD test suite as
lib/libc/tests/nss

- Convert the testcases to ATF
- Do some style(9) cleanups:
-- Sort headers
-- Apply indentation fixes
-- Remove superfluous parentheses
- Explicitly print out debug printfs for use with `kyua {debug,report}`; for
  items that were overly noisy, they've been put behind #ifdef DEBUG
  conditionals
- Fix some format strings

MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-16 08:09:03 +00:00
Enji Cooper
6971646f3e Add Makefile accidentally missed in r292317
MFC after: 1 week
X-MFC with: r292317
Sponsored by: EMC / Isilon Storage Division
2015-12-16 05:19:07 +00:00
Enji Cooper
9ada6f3369 Integrate tools/regression/lib/libc/resolv into the FreeBSD test suite as
lib/libc/tests/resolv

Convert the testcases to ATF

MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-16 05:11:57 +00:00
Kevin Lo
d0ec8fd065 Remove sys/types.h due to STANDARDS and unistd.h also includes sys/types.h. 2015-12-15 15:19:06 +00:00
Kevin Lo
13230220de Remove sys/types.h due to STANDARDS and unistd.h also includes sys/types.h.
Reviewed by:	bde
2015-12-15 15:08:29 +00:00
Enji Cooper
8a615d0fa8 Allow users override DEBUG on the command line via DEBUG_FLAGS="-DDEBUG" with
lib/libc/resolv by conditionalizing its definition

MFC after: 3 days
Reviewed by: ume, vangyzen
Differential Revision: https://reviews.freebsd.org/D4519
2015-12-15 05:37:09 +00:00
John Baldwin
d6fb489498 Start on a new library (libsysdecode) that provides routines for decoding
system call information such as system call arguments.  Initially this
will consist of pulling duplicated code out of truss and kdump though it
may prove useful for other utilities in the future.

This commit moves the shared utrace(2) record parser out of kdump into
the library and updates kdump and truss to use it.  One difference from
the previous version is that the library version treats unknown events
that start with the "RTLD" signature as unknown events.  This simplifies
the interface and allows the consumer to decide how to handle all
non-recognized events.  Instead, this function only generates a string
description for known malloc() and RTLD records.

Reviewed by:	bdrewery
Differential Revision:	https://reviews.freebsd.org/D4537
2015-12-15 00:05:07 +00:00
Eric van Gyzen
c70540ec67 resolver: preserve binary compatibility; reduce header pollution
In r289315, I added new fields to res_state.  This broke binary
backward compatibility.  It also broke some ports (and possibly
other code) by requiring the definition of time_t and struct timespec.

Fix these problems by moving the new fields into __res_state_ext.

Suggested by:	ume
Reviewed by:	ume
MFC after:	3 days
Sponsored by:	Dell Inc.
Differential Revision:	https://reviews.freebsd.org/D4472
2015-12-14 17:21:06 +00:00
Enji Cooper
1385475525 Add -static to CFLAGS to unbreak the tests by using a libc.a with
the xlocale private symbols exposed which aren't exposed publicly
via the DSO

PR: 191354
MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-13 06:33:52 +00:00
Jilles Tjoelker
3c0237a634 exec(3): Fix COMPATIBILITY section: default path does not contain cwd.
MFC after:	1 week
2015-12-12 15:57:46 +00:00
Hajimu UMEMOTO
ea24ff4734 RFC 3493 requires ignoring the loopback address for A_ADDRCONFIG.
Since it breaks certain jail setup, we ignore just 127.0.0.1
instead of whole loopback address range.

PR:		192014
Reviewed by:	hrs
MFC after:	1 week
2015-12-12 14:42:50 +00:00
Ruslan Bukin
1fdcc5e5c0 Start support for the RISC-V 64-bit architecture developed by UC Berkeley.
RISC-V is a new ISA designed to support computer research and education, and
is now become a standard open architecture for industry implementations.

This is a minimal set of changes required to run 'make kernel-toolchain'
using external (GNU) toolchain.

The FreeBSD/RISC-V project home: https://wiki.freebsd.org/riscv.

Reviewed by:	andrew, bdrewery, emaste, imp
Sponsored by:	DARPA, AFRL
Sponsored by:	HEIF5
Differential Revision:	https://reviews.freebsd.org/D4445
2015-12-11 22:55:23 +00:00
Hajimu UMEMOTO
4eb17fd786 The calls to RES_SET_H_ERRNO() macro on error paths wind up
dereferencing an uninitialized res.

PR:		202142
Submitted by:	Sean Boudreau
MFC after:	1 week
2015-12-10 11:11:44 +00:00
Stanislav Sedov
5eff94ee56 RPC: populate local address for rendezvous transporter.
When accepting a connection on underlying tcp socket rpc vc
transporter fails to populate local address.  This change rectifies
this problem by modifying rendezvous_request() to fill out the xptr
structure member with appropriate information.

Submitted by:	Alex Burlyga <alex.burlyga.ietf@gmail.com>
MFC after:	2 weeks
Differential Revision: https://reviews.freebsd.org/D4206
2015-12-10 05:17:04 +00:00
Enji Cooper
c6e615506b Use stdint.h instead of inttypes.h as the latter pollutes namespace more
MFC after: 3 days
X-MFC with: r292004
Submitted by: bde
Sponsored by: EMC / Isilon Storage Division
2015-12-09 09:14:57 +00:00
Enji Cooper
692a3987f2 Fix compilation when -DDEBUG is defined by adding inttypes.h #include
for intmax_t

MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D4434
Reported by: cppcheck
Reviewed by: jhb
Sponsored by: EMC / Isilon Storage Division
2015-12-08 22:47:54 +00:00
Enji Cooper
8abd0f3f26 Delete bogus freeing of uninitialized data
MFC after: 3 days
Reported by: cppcheck
Sponsored by: EMC / Isilon Storage Division
2015-12-08 04:51:21 +00:00
Enji Cooper
3e22799178 Add missing va_ends for corresponding va_starts to clean up variable arguments
initialized in _test_fmt(..)

MFC after: 3 days
Reported by: cppcheck
Sponsored by: EMC / Isilon Storage Division
2015-12-08 04:45:44 +00:00
Enji Cooper
23e491222f Unbreak compiling getnetgrent.c with -DDEBUG after r236402 by adding a
missing "}"

MFC after: 3 days
Sponsored by: EMC / Isilon Storage Division
2015-12-08 04:40:03 +00:00
Konstantin Belousov
4d22d07a07 Add support for usermode (vdso-like) gettimeofday(2) and
clock_gettime(2) on ARMv7 and ARMv8 systems which have architectural
generic timer hardware. It is similar how the RDTSC timer is used in
userspace on x86.

Fix a permission problem where generic timer access from EL0 (or
userspace on v7) was not properly initialized on APs.

For ARMv7, mark the stack non-executable. The shared page is added for
all arms (including ARMv8 64bit), and the signal trampoline code is
moved to the page.

Reviewed by:	andrew
Discussed with:	emaste, mmel
Sponsored by:	The FreeBSD Foundation
Differential revision:	https://reviews.freebsd.org/D4209
2015-12-07 12:20:26 +00:00
Bryan Drewery
b1e20a1db5 Fix regression in r291738: This really wants -lssp.
The normal LIBADD is ssp_nonshared.  This also had a DPADD on LIBSSP which
does not actually exist, it is blank.

Sponsored by:	EMC / Isilon Storage Division
2015-12-05 18:56:21 +00:00
Enji Cooper
0b6008d017 Initialize errno to 0 in the nul testcase before testing it
For some odd reason stable/10 requires this, otherwise it always fails
the errno == 0 check on line 196.

Sponsored by: EMC / Isilon Storage Division
2015-12-05 04:10:15 +00:00
Enji Cooper
df943f005e Fix -Wformat issues and minor whitespace issues in surrounding areas
MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-05 02:25:20 +00:00
Enji Cooper
e3bc7f4da8 split.ih:
- Create automatically generated include header for split.c

main.c:
- Use function definitions from debug.ih and split.ih instead of externs

Sponsored by: EMC / Isilon Storage Division
2015-12-05 02:23:44 +00:00
Enji Cooper
16c284eca2 Use == instead of = in the function comment above split(..) so mkh -p
exposes split(..).

MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-05 02:18:36 +00:00
Enji Cooper
8eba7ea3b3 Use ANSI C function prototypes/definitions instead of K&R style ones
MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-05 02:07:55 +00:00
Enji Cooper
1dce0e7706 Add missing headers and sort #includes per style(9)
MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-05 01:19:35 +00:00
Enji Cooper
f76918a8c4 - Use ANSI C function prototypes/definitions instead of K&R style ones
- Add a missing return type for main(..)

MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-05 01:13:18 +00:00
Enji Cooper
b20e9c5f4c Fix -Wformat warnings by using the correct format qualifiers
MFC after: 1 week
Sponsored by: EMC / Isilon Storage Division
2015-12-05 01:12:58 +00:00
Bryan Drewery
eacae6dc66 Fix LDADD/DPADD that should be LIBADD.
Sponsored by:	EMC / Isilon Storage Division
2015-12-04 03:17:47 +00:00
Bryan Drewery
c196e3988a Follow-up r291330: h_testbits.h is only needed by xdr_test.
X-MFC-With:	r291330
MFC after:	1 week
Sponsored by:	EMC / Isilon Storage Division
2015-11-25 22:33:25 +00:00
Enji Cooper
45d1fa1891 Link fclose(3) to fdclose(3)
X-MFC with: r285140
MFC after: 3 weeks (need to evaluate whether or not r285140 can be MFCed)
Sponsored by: EMC / Isilon Storage Division
2015-11-25 22:07:18 +00:00
Bryan Drewery
114350b9de Replace DPSRCS that work fine in SRCS.
This is so that 'make depend' is not a required build step in these
files.

DPSRCS is overall unneeded.  DPSRCS already contains SRCS, so anything
which can safely be in SRCS should be.  DPSRCS is mostly just a way to
generate files that should not be linked into the final PROG/LIB.  For
headers and grammars it is safe for them to be in SRCS since they will
be excluded during linking and installation.

The only remaining uses of DPSRCS are for generating .c or .o files that
must be built before 'make depend' can run 'mkdep' on the SRCS c files
list.  A semi-proper example is in tests/sys/kern/acct/Makefile where a
checked-in .c file has an #include on a generated .c file.  The
generated .c file should not be linked into the final PROG though since
it is #include'd.  The more proper way here is just to build/link it in
though without DPSRCS.  Another example is in sys/modules/linux/Makefile
where a shell script runs to parse a DPSRCS .o file that should not be
linked into the module.  Beyond those, the need for DPSRCS is largely
unneeded, redundant, and forces 'make depend' to be ran.  Generally,
these Makefiles should avoid the need for DPSRCS and define proper
dependencies for their files as well.

An example of an improper usage and why this matters is in usr.bin/netstat.
nl_defs.h was only in DPSRCS and so was not generated during 'make all',
but only during 'make depend'.  The files including it lacked proper
depenencies on it, which forced running 'make depend' to workaround that
bug.  The 'make depend' target should mostly be used for incremental build
help, not to produce a working build.  This specific example was broken in
the meta build until r287905 since it does not run 'make depend'.

The gnu/lib/libreadline/readline case is fine since bsd.lib.mk has 'OBJS:
SRCS:M*.h' when there is no .depend file.

Sponsored by:	EMC / Isilon Storage Division
MFC after:	1 week
2015-11-25 20:38:17 +00:00
Bryan Drewery
b791fbe630 META MODE: Don't create .meta files when symlinking sources into the obj directory.
Tracking these leads to situations where meta mode will consider the
file to be out of date if /bin/sh or /bin/ln are newer than the source
file.  There's no reason for meta mode to do this as make is already
handling the rebuild dependency fine.

Sponsored by:	EMC / Isilon Storage Division
2015-11-25 19:44:43 +00:00
Enji Cooper
0b5cc81d3b Link localeconv(3) to localeconv_l(3)
MFC after: 3 days
2015-11-25 09:12:30 +00:00
Dag-Erling Smørgrav
2e59a758fd markup fixes 2015-11-23 12:47:08 +00:00
Enji Cooper
2b4bcea740 Use __MAKE_SHELL instead of HOST_SHELL when generating aton_ether_subr.c
(HOST_SHELL is used in NetBSD)

This fixes permission denied issues when gen_ether_subr is not executable

MFC after: 3 days
Reported by: José Pérez <fbl@aoek.com>
Suggested by: bdrewery, sjg
2015-11-23 07:57:41 +00:00