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 Libraries
* libquadmath: (libquadmath).   GCC Quad-Precision Math 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.

Software development
* Bfd: (bfd).                   The Binary File Descriptor library.
* Binutils: (binutils).         The GNU binary utilities.
* Cpplib: (cppinternals).       Cpplib internals.
* Ld: (ld).                     The GNU linker.
* 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.
* gprof: (gprof).               Profiling your program's execution

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

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