
  x-check-symbols.pl is a script that analyzes installed files and checks
for missing and conflicting symbols.

  The script basically loads all shared binaries in a common installation
of x11- related packages, and is expected to help to ensure no run time
crashes will happen due to unsresolved symbols.

  At the time of writting this text, X Org have switched recently to a modular
system where a significant amount of modules still doesn't have a proper
dependency tracking neither validatation of installed files.

  x-check-symbols.pl uses the objdump program from GNU binutils to list
all symbols of shared object (note that all code in x11- packages currently
in Mandriva are dynamic libraries or binaries, where addresses are usually
only know after loading and starting execution), and lists information about:

o Type of a symbol that can be:
	unknown:	Not defined in the shared object and in this object
			not clearly identifiable as a function call or
			a pointer/integer stored in a machine word.
	object:		Usually a data structure, but can be a variable
			of a basic data type.
	function:	Executable code.
o Linkage of symbol, that can be:
	external:	Symbol is accessible by every other module in the
			same address space.
	internal:	Symbol is not visible outside this shared object,
			but can still be accessed using pointers.
			In normal C code, this can be also a "static" symbol,
			that is only visible in the current source file.
	hidden:		This symbol, at the C source level has the same
			sematics of extern symbols, but in the shared object
			code, it has the semantics of C static symbols, as
			it is only visible in the current DSO (dynamic shared
			object).
	There are two others, but they are not used, and have very special
	handling, one example is a variant of hidden symbols that cannot
	be accessed via pointers because the code has been optimized in
	a way that doesn't generate code for handling it.
o Home of symbol. This is just information to know that this object not
  only uses this symbol, but also that the symbol is defined in this shared
  object.

  What the script checks:
o Name clashes:
    Usually the loader will prefer the symbol defined in the main binary
    when a conflicting symbol exists in a "standard shared library", but in
    the case of the X Server, modules aren't a "standard shared library",
    and this can cause problems as there isn't a defined semantics. Usually
    what happens is that if different modules define a symbol with the same
    name, code in the module uses its own definition, and code outside has
    undefined behaviour.
o Undefined symbols:
    This may have been caused by changes in the API, usually meaning that
    the module has not been recompiled, or if recompiled, that this module
    has not been updated to a newer API. The script also checks the list
    of hidden symbols of all shared objects, to make sure a symbol was
    not erroneously marked hidden.
    Undefined symbols, when accessed will cause a run time fatal failure,
    without any recovery code being run.

  The script also prints information simulating the loader, by checking
an undefined symbol, and then, if it is resolved, prints the path required
to satisfy the symbol as well as the alternate paths, i.e. if a symbol is
defined in more than one place, it prints all candidates.

  At the end of the exection, the script also lists all symbols that are
exported, but not used by any other of the modules installed at the time
the script was run. To ensure the script will work properly, it must be
run on a computer where all modules have been installed.


  Available options include:
-a		Don't ignore an internal list of run time symbols, useful to
		filter redundant or not important information
-m path		Use an alternate path for installed modules. Default value,
		if -m option is not used is /usr/lib/xorg/modules
-e		Don't print a message about symbols exported but not accessed
		by any other shared object.
-x		Don't print most information about the X Server. Also useful
		to filter redundant information, when analyzing modules
		dependencies or problems.
-s		Inherits library symbols for modules. By default it assumes
		modules cannot be linked to reference system libraries, and
		only the X Server can be linked. This option handle modules
		the same way the X Server.
-h or -?	Prints a list of options and brief description.
