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:

Miscellaneous
* As: (as).                     The GNU assembler.
* Bfd: (bfd).                   The Binary File Descriptor library.
* Gas: (as).                    The GNU assembler.
* Ld: (ld).                       The GNU linker.
* gprof: (gprof).                Profiling your program's execution

Individual utilities
* addr2line: (binutils)addr2line. Convert addresses to file and line.
* aot-compile: (gcj)Invoking aot-compile.
                            Compile bytecode to native and generate databases.
* 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.
* gc-analyze: (gcj)Invoking gc-analyze.
                            Analyze Garbage Collector (GC) memory dumps.
* gcj-dbtool: (gcj)Invoking gcj-dbtool.
                            Tool for manipulating class file databases.
* gij: (gcj)Invoking gij.   GNU interpreter for Java bytecode
* grmic: (gcj)Invoking grmic.
                            Generate stubs for Remote Method Invocation.
* jcf-dump: (gcj)Invoking jcf-dump.
                            Print information about Java class files
* jv-convert: (gcj)Invoking jv-convert.
                            Convert file from one encoding to another
* 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.
* rebuild-gcj-db: (gcj)Invoking rebuild-gcj-db.
                            Merge the per-solib databases made by aot-compile
                            into one system-wide database.
* 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
* Annotate: (annotate).                 The obsolete annotation interface.
* Binutils: (binutils).         The GNU binary utilities.
* Cpp: (cpp).                  The GNU C preprocessor.
* Cpplib: (cppinternals).      Cpplib internals.
* Gcj: (gcj).               Ahead-of-time compiler for the Java language
* Gdb: (gdb).                     The GNU debugger.
* Gdb-Internals: (gdbint).	The GNU debugger's internals.
* Stabs: (stabs).                 The "stabs" debugging information format.
* 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.
* gfortran: (gfortran).                  The GNU Fortran Compiler.

GNU Libraries
* libgomp: (libgomp).                    GNU OpenMP runtime library
