This is the file .../info/dir, which contains the
topmost node of the Info hierarchy, called (dir)Top.
The first time you invoke Info you start off looking at this node.

File: dir,	Node: Top	This is the top of the INFO tree

  This (the Directory node) gives a menu of major topics.
  Typing "q" exits, "?" lists all Info commands, "d" returns here,
  "h" gives a primer for first-timers,
  "mEmacs<Return>" visits the Emacs manual, etc.

  In Emacs, you can click mouse button 2 on a menu item or cross reference
  to select it.

* Menu:

GNU libraries
* gmp: (gmp).                   GNU Multiple Precision Arithmetic Library.

GNU Packages
* mpc: (mpc)Multiple Precision Complex Library.

Individual utilities
* addr2line: (binutils)addr2line.               Convert addresses to file and 
                                                  line.
* ar: (binutils)ar.                             Create, modify, and extract 
                                                  from archives.
* c++filt: (binutils)c++filt.                   Filter to demangle encoded C++ 
                                                  symbols.
* cxxfilt: (binutils)c++filt.                   MS-DOS name for c++filt.
* dlltool: (binutils)dlltool.                   Create files needed to build 
                                                  and use DLLs.
* elfedit: (binutils)elfedit.                   Update the ELF header of ELF 
                                                  files.
* nlmconv: (binutils)nlmconv.                   Converts object code into an 
                                                  NLM.
* nm: (binutils)nm.                             List symbols from object files.
* objcopy: (binutils)objcopy.                   Copy and translate object 
                                                  files.
* objdump: (binutils)objdump.                   Display information from 
                                                  object files.
* ranlib: (binutils)ranlib.                     Generate index to archive 
                                                  contents.
* readelf: (binutils)readelf.                   Display the contents of ELF 
                                                  format files.
* size: (binutils)size.                         List section sizes and total 
                                                  size.
* strings: (binutils)strings.                   List printable strings from 
                                                  files.
* strip: (binutils)strip.                       Discard symbols.
* windmc: (binutils)windmc.                     Generator for Windows message 
                                                  resources.
* windres: (binutils)windres.                   Manipulate Windows resources.

Programming
* flex: (flex).                 Fast lexical analyzer generator (lex 
                                  replacement).

Software development
* Annotate: (annotate).         The obsolete annotation interface.
* As: (as).                     The GNU assembler.
* Bfd: (bfd).                   The Binary File Descriptor library.
* Binutils: (binutils).         The GNU binary utilities.
* Cpp: (cpp).                   The GNU C preprocessor.
* Cpplib: (cppinternals).       Cpplib internals.
* Gas: (as).                    The GNU assembler.
* Gdb: (gdb).                   The GNU debugger.
* Ld: (ld).                     The GNU linker.
* Stabs: (stabs).               The "stabs" debugging information format.
* bison: (bison).               GNU parser generator (Yacc replacement).
* g++: (gcc).                   The GNU C++ compiler.
* gcc: (gcc).                   The GNU Compiler Collection.
* gccinstall: (gccinstall).     Installing the GNU Compiler Collection.
* gccint: (gccint).             Internals of the GNU Compiler Collection.
* gcov: (gcc) Gcov.             'gcov'--a test coverage program.
* gcov-tool: (gcc) Gcov-tool.   'gcov-tool'--an offline gcda profile 
                                  processing program.
* gdbserver: (gdb) Server.      The GNU debugging server.
* gprof: (gprof).               Profiling your program's execution

Software libraries
* mpfr: (mpfr).                 Multiple Precision Floating-Point Reliable 
                                  Library.

Texinfo documentation system
* info stand-alone: (info-stnd).
                                Read Info documents without Emacs.
* install-info: (texinfo)Invoking install-info.
                                Update info/dir entries.
* makeinfo: (texinfo)Invoking makeinfo.
                                Translate Texinfo source.
* pdftexi2dvi: (texinfo)PDF Output.
                                PDF output for Texinfo.
* pod2texi: (pod2texi)Invoking pod2texi.
                                Translate Perl POD to Texinfo.
* texi2dvi: (texinfo)Format with texi2dvi.
                                Print Texinfo documents.
* texi2pdf: (texinfo)PDF Output.
                                PDF output for Texinfo.
* texindex: (texinfo)Format with tex/texindex.
                                Sort Texinfo index files.
* Texinfo: (texinfo).           The GNU documentation format.

Text creation and manipulation
* M4: (m4).                     A powerful macro processor.
