This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Untested symbols


Following up on a recent discussion, attached are:

* A list of symbols exported by glibc's shared libraries (excluding 
GLIBC_PRIVATE symbols and compat symbols), on x86_64, that do not appear 
to be tested by any glibc testcase.

* The script that generated that list.

* The modified version of abilist.awk used by that script to determine 
symbols that should be tested.

The list generation is based on heuristics - look for <test>.out files in 
the build tree (where you must first have run the testsuite) and then look 
at dynamic symbols in the corresponding <test> file and presume they are 
covered by the testsuite.  As such, the list may not be perfect (it might 
include symbols that are tested but e.g. only by a shared library or other 
file whose name doesn't correspond to a .out file, or miss symbols that 
appear as dynamic symbols in a test but aren't adequately tested).

The list include reserved-namespace symbols.  This is deliberate.  For 
each such symbol, if there is a good reason for it to be in the public ABI 
(for example, for namespace-clean use in libstdc++ or libgcc, or because 
it is used by a public macro in an installed header), then it should be 
tested (if it's used via a macro, that macro should be tested as the 
interface actually exposed to users).  If there is no such good reason, 
the symbol should be made into a compat symbol (and added to 
GLIBC_PRIVATE, if needed by other glibc libraries).  (If the non-reserved 
version of a function is used by libstdc++ although the reserved version 
*should* be used there, that's probably sufficient reason to keep the 
reserved version in the public interface.)  A few cases may be tricky to 
test if e.g. the use is in macros that are still present in current glibc, 
but only for certain compiler versions.

I hope GNU/Linux distributors have tools that can answer questions of the 
form "what binaries in the whole distribution are using this dynamic 
symbol", as that would certainly be helpful in establishing whether some 
reserved-namespace symbol is actually being used (as a starting point for 
deciding whether it *should* be being used).

Some symbols are in fact tested but only in a way that ends up using a 
macro or inline function or GCC built-in function that hides the function 
exported from the shared library.  (For example, atof.)  In such cases, 
there should also be a test that makes sure to disable the inline / macro 
/ built-in function, so that the public interface to the shared library 
gets properly tested.

Some functions may only be tested for static links - but if it's in the 
shared library, the shared library version should be tested as well.

As noted in <http://sourceware.org/ml/libc-alpha/2013-07/msg00380.html>, 
if a function can't (usefully, or safely) be called from the testsuite it 
should still be verified that calls compile and link without warnings, 
e.g.

volatile int run_test = 0;

int
do_test (void)
{
  /* This interface needs root access to run, so we only test that
     calls to it compile and link.  */
  if (run_test)
    call_the_interface (arguments);
  return 0;
}

Certainly adding tests of all these functions (which should generally try 
to test that the main functionality of the interface works as specified, 
rather than just that the function exists) will be a lot of work, but it 
can be done a little bit at a time (and in many cases, making a function 
into a compat symbol may be the right approach).  I fully expect various 
bugs, both generic and architecture-specific, will be found in the 
process.

-- 
Joseph S. Myers
joseph@codesourcery.com

Attachment: untested-syms
Description: Text document

Attachment: list-untested-symbols
Description: Text document

Attachment: abilist-mod.awk
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]