WSL2-Linux-Kernel/tools/testing/selftests/futex
Dmitry Safonov 3e8393630e selftests: use LDLIBS for libraries instead of LDFLAGS
While building selftests, the following errors were observed:
> tools/testing/selftests/timens'
> gcc -Wall -Werror -pthread  -lrt -ldl  timens.c  -o tools/testing/selftests/timens/timens
> /usr/bin/ld: /tmp/ccGy5CST.o: in function `check_config_posix_timers':
> timens.c:(.text+0x65a): undefined reference to `timer_create'
> collect2: error: ld returned 1 exit status

Quoting commit 870f193d48 ("selftests: net: use LDLIBS instead of
LDFLAGS"):

The default Makefile rule looks like:

$(CC) $(CFLAGS) $(LDFLAGS) $@ $^ $(LDLIBS)

When linking is done by gcc itself, no issue, but when it needs to be passed
to proper ld, only LDLIBS follows and then ld cannot know what libs to link
with.

More detail:
https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

LDFLAGS
Extra flags to give to compilers when they are supposed to invoke the linker,
‘ld’, such as -L. Libraries (-lfoo) should be added to the LDLIBS variable
instead.

LDLIBS
Library flags or names given to compilers when they are supposed to invoke the
linker, ‘ld’. LOADLIBES is a deprecated (but still supported) alternative to
LDLIBS. Non-library linker flags, such as -L, should go in the LDFLAGS
variable.

While at here, correct other selftests, not only timens ones.

Reported-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Dmitry Safonov <dima@arista.com>
Tested-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
2020-02-13 13:14:34 -07:00
..
functional selftests: use LDLIBS for libraries instead of LDFLAGS 2020-02-13 13:14:34 -07:00
include treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
Makefile selftests: futex: delete RUN_TESTS and EMIT_TESTS overrides 2018-05-30 15:21:52 -06:00
README docs: fix locations of several documents that got moved 2016-10-24 08:12:35 -02:00
run.sh treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00

README

Futex Test
==========
Futex Test is intended to thoroughly test the Linux kernel futex system call
API.

Functional tests shall test the documented behavior of the futex operation
code under test. This includes checking for proper behavior under normal use,
odd corner cases, regression tests, and abject abuse and misuse.

Futextest will also provide example implementation of mutual exclusion
primitives. These can be used as is in user applications or can serve as
examples for system libraries. These will likely be added to either a new lib/
directory or purely as header files under include/, I'm leaning toward the
latter.

Quick Start
-----------
# make
# ./run.sh

Design and Implementation Goals
-------------------------------
o Tests should be as self contained as is practical so as to facilitate sharing
  the individual tests on mailing list discussions and bug reports.
o The build system shall remain as simple as possible, avoiding any archive or
  shared object building and linking.
o Where possible, any helper functions or other package-wide code shall be
  implemented in header files, avoiding the need to compile intermediate object
  files.
o External dependencies shall remain as minimal as possible. Currently gcc
  and glibc are the only dependencies.
o Tests return 0 for success and < 0 for failure.

Output Formatting
-----------------
Test output shall be easily parsable by both human and machine. Title and
results are printed to stdout, while intermediate ERROR or FAIL messages are
sent to stderr. Tests shall support the -c option to print PASS, FAIL, and
ERROR strings in color for easy visual parsing. Output shall conform to the
following format:

test_name: Description of the test
	Arguments: arg1=val1 #units specified for clarity where appropriate
	ERROR: Description of unexpected error
	 FAIL: Reason for test failure
	# FIXME: Perhaps an " INFO: informational message" option would be
	#        useful here. Using -v to toggle it them on and off, as with -c.
	# there may be multiple ERROR or FAIL messages
Result: (PASS|FAIL|ERROR)

Naming
------
o FIXME: decide on a sane test naming scheme.  Currently the tests are named
  based on the primary futex operation they test. Eventually this will become a
  problem as we intend to write multiple tests which collide in this namespace.
  Perhaps something like "wait-wake-1" "wait-wake-2" is adequate, leaving the
  detailed description in the test source and the output.

Coding Style
------------
o The Futex Test project adheres to the coding standards set forth by Linux
  kernel as defined in the Linux source Documentation/process/coding-style.rst.