home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / unix / emx / doc / gnudev.doc < prev    next >
Text File  |  1993-01-03  |  26KB  |  753 lines

  1. ===============================================================================
  2. gnudev.doc        emx 0.8f     GNU DEVELOPMENT TOOLS INFORMATION    03-Jan-1993
  3. ===============================================================================
  4.  
  5. Table of Contents
  6. =================
  7.  
  8. 1   Introduction
  9. 2   GCC -- compiling and linking C and C++ programs
  10. 2.1   Calling GCC
  11. 2.2   Environment variables
  12. 2.3   #pragma
  13. 2.4   Additional command line options
  14. 2.5   C++
  15. 2.6   Objective C
  16. 2.7   Stack probes
  17. 2.8   Other changes
  18. 2.9   Calling conventions
  19. 3   libg++ -- the GNU C++ library
  20. 4   GDB -- debugging
  21. 5   GAS -- assembling
  22. 6   ld  -- linking
  23. 7   ar  -- managing library files
  24. 8   ranlib
  25. 9   nm -- listing symbols
  26. 10  strip -- removing the symbol table
  27. 11  info -- browsing info files
  28. 12  makeinfo -- creating info files
  29. 13  texindex -- creating index for printed manual
  30. 14  termcap -- terminal capabilities
  31. 15  readline -- input editing
  32. 16  Known problems
  33.  
  34.  
  35. 1 Introduction
  36. ==============
  37.  
  38. This text describes how to use the GNU C Compiler and other GNU
  39. utilities with emx.  See emxdev.doc for instructions for the emx
  40. utilities.  For details information about GCC and GDB, read the GCC
  41. and GDB manuals, see install.doc.  See build.doc for details on
  42. compiling the GNU utilities.
  43.  
  44. All the programs assume that the entire package is installed on one
  45. disk drive in these directories:
  46.  
  47.     /emx/bin        Executable files
  48.     /emx/etc        termcap.dat
  49.     /emx/lib        Library files
  50.     /emx/include    Include files
  51.  
  52. If the /emx directory is not on the current drive, use the
  53. C_INCLUDE_PATH and LIBRARY_PATH environment variables, for instance
  54.  
  55.      set C_INCLUDE_PATH=c:/emx/include
  56.      set LIBRARY_PATH=c:/emx/lib
  57.  
  58. to use drive C.
  59.  
  60. Use forward slashes instead of backward slashes in path names!
  61.  
  62. Directories:
  63.  
  64. /emx                            Main directory, empty
  65. /emx/bin                        Executable files and batch files
  66. /emx/doc                        Documentation
  67. /emx/etc                        termcap.dat
  68. /emx/gnu/bfd                    Binary File Descriptor library (for GDB)
  69. /emx/gnu/binutils               GNU utilties for binary files (sources)
  70. /emx/gnu/gas-1.38               GNU assembler source
  71. /emx/gnu/gcc-2.3                GNU C compiler source
  72. /emx/gnu/gdb-4.7                GNU debugger source
  73. /emx/gnu/include                Header files for GCC (C language)
  74. /emx/gnu/include.cpp            Header files for GCC (C++ language)
  75. /emx/gnu/libibert               -liberty (for GDB)
  76. /emx/gnu/readline               Readline library (for GDB)
  77. /emx/gnu/termcap                GNU termcap
  78. /emx/include                    C header files
  79. /emx/lib                        Libraries
  80.  
  81.  
  82. 2 GCC -- compiling and linking C and C++ programs
  83. =================================================
  84.  
  85. GCC 2.3.3 has been ported to emx.
  86.  
  87.  
  88. 2.1 Calling GCC
  89. ---------------
  90.  
  91. Example:
  92.  
  93.     gcc -o test.exe test.c
  94.  
  95. This assumes that emxl.exe can be found in one of the directories
  96. listed in the EMXPATH and PATH environment variables, or in the
  97. directory /emx/bin, see also ld.  If the output file name doesn't end
  98. in `.exe', the output file will have a.out format.  Please note that
  99. the example given above creates a file named `test' which will be
  100. deleted after converting to .exe format.
  101.  
  102.  
  103. 2.2 Environment variables
  104. -------------------------
  105.  
  106. If you want to develop programs on a drive different from the drive
  107. where emx is installed, you have to set the C_INCLUDE_PATH and
  108. LIBRARY_PATH environment variables, for instance,
  109.  
  110.     set C_INCLUDE_PATH=c:/emx/include
  111.     set LIBRARY_PATH=c:/emx/lib
  112.  
  113. If you want to compile C++ programs, set CPLUS_INCLUDE_PATH as well:
  114.  
  115.     set CPLUS_INCLUDE_PATH=c:/emx/include.cpp;c:/emx/include
  116.  
  117. The genclass utility needs the following environment variable:
  118.  
  119.     set PROTODIR=c:/emx/include.cpp/gen
  120.  
  121. If the TMPDIR environment variable is not set, temporary files are
  122. written to the current working directory.  For instance, use
  123.  
  124.     SET TMPDIR=f:/tmp/
  125.  
  126. to put temporary files into the F:/TMP directory.
  127.  
  128.  
  129. 2.3 #pragma
  130. -----------
  131.  
  132. The emx port of GCC supports
  133.  
  134.     #pragma pack(n)
  135.  
  136. where n is 1, 2 or 4.  The default is 4.  Structure fields are aligned
  137. to multiples of N bytes, according to the value N as set by the last
  138. #pragma pack statement.
  139.  
  140.     #pragma pack()
  141.  
  142. reverts to the default (4).
  143.  
  144.  
  145. 2.4 Additional command line options
  146. -----------------------------------
  147.  
  148. Several command line options have been added to GCC: -mprobe,
  149. -mno-probe, -Zdll, -Zmt, -Zomf, -Zsys and -Zwait.
  150.  
  151. -mprobe enables generation of stack probes (see below), -mno-probe
  152. (which is the default) disables generation of stack probes.
  153.  
  154. The additional GCC command line option -Zomf causes GCC to call emxomf
  155. for converting .o files to .obj files and to call emxomfld instead of
  156. ld.  As emxomfld calls LINK386, this option works only under OS/2.
  157. Note that LINK386 adds a default extension (.EXE or .DLL) to the
  158. output file name.  Use the option
  159.  
  160.     -T 0x10000
  161.  
  162. to create non-relocatable .EXE files, which are slightly smaller and
  163. load slightly faster.
  164.  
  165. Use -Zsys with -Zomf to link with the system call library (emx
  166. emulator) libsys.lib instead of using the run time library emx.dll for
  167. system calls.  The library version of the system calls provide only a
  168. subset of the emx system call interface.
  169.  
  170. The additional GCC command line option -Zdll links with dll0.o (or
  171. dll0.obj if -Zomf is given) instead of crt0.o.  This is required for
  172. creating dynamic link libraries.
  173.  
  174. Use the additional GCC command line option -Zmt to link a program that
  175. uses emxlibc.dll, the DLL version of the C library.  The preprocessor
  176. macro __MT__ will be defined when -Zmt is used.
  177.  
  178. The additional GCC command line option -Zwait causes the assembler to
  179. be called with the -w option to automatically insert `wait'
  180. instructions.  As all numeric exceptions are masked, this is currently
  181. not required.
  182.  
  183. You can give the name of a module definition file on the command line.
  184. The name must end with .def and is passed to ld, which in turn passes
  185. it to emxbind.  When using -Zomf, the name is passed to emxomfld,
  186. which in turn passes it to LINK386.  If the output file names ends
  187. with .dll, a default module definition file is used by emxbind unless
  188. a .def file is given on the GCC command line.
  189.  
  190. You can give the name of a binary resource file on the command line.
  191. The name must end with .res and is passed to ld, which in turn passes
  192. it to emxbind.  When using -Zomf, the name is passed to emxomfld,
  193. which runs RC to copy the resources to the output file.
  194.  
  195. The following table shows the startup module and the libraries passed
  196. to the linker by GCC, depending on the command line options -Zomf,
  197. -Zsys and -Zdll:
  198.  
  199.   Options                | Startup  | Libraries
  200.   -----------------------+----------+--------------------------------
  201.   (none)                 | crt0.o   | libgcc.a libc.a libemx1.a
  202.                    -Zdll | dll0.o   | libgcc.a libc.a libemx1.a
  203.        -Zomf             | crt0.obj | libgcc.lib libc.lib libemx1.lib
  204.        -Zomf       -Zdll | dll0.obj | libgcc.lib libc.lib libemx1.lib
  205.        -Zomf -Zsys       | crt0.obj | libgcc.lib libc.lib libsys.lib
  206.        -Zomf -Zsys -Zdll | dll0.obj | libgcc.lib libc.lib libsys.lib
  207.   -Zmt                   | crt0.o   | libmt.a
  208.   -Zmt             -Zdll | dll0.o   | libmt.a
  209.   -Zmt -Zomf             | crt0.obj | libmt.lib
  210.   -Zmt -Zomf       -Zdll | dll0.obj | libmt.lib
  211.  
  212. The OS/2 import library libos2.a or libos2.lib is always passed to the
  213. linker.  The import library for emx.dll, libemx2.a or libemx2.lib, is
  214. passed to the linker unless -Zsys is used.
  215.  
  216.  
  217. 2.5 C++
  218. -------
  219.  
  220. C++ programs should have a `.cc' file extension.
  221.  
  222. Use the -lgpp command line option to link C++ programs.
  223.  
  224. Example:
  225.  
  226.     gcc -o hello.exe hello.cc -lgpp -s
  227.  
  228. The `collect' program is not required with the emx port of GCC.
  229.  
  230. Hint: Use the -s option (of GCC or emxomf) to remove the symbol table;
  231. it's quite big.
  232.  
  233.  
  234. 2.6 Objective C
  235. ---------------
  236.  
  237. To link a program written in the Objective C language, you have to use
  238. the libobjc library: use -lobjc on the GCC command line.  Example:
  239.  
  240.   gcc -o objcsamp.exe objcsamp.m -lobjc -s
  241.  
  242. Note that GCC does not include any class libraries.
  243.  
  244.  
  245. 2.7 Stack probes
  246. ----------------
  247.  
  248. Stack probes are used to manage automatic stack growth if the stack is
  249. not completely committed.  When allocating stack space, the new stack
  250. pages are touched before changing the stack pointer to make them
  251. accessible.  Generation of stack probes is disabled by default.  Use
  252. the -mprobe option to enable generation of stack probes.
  253.  
  254. You need stack probes if
  255.  
  256. - you use DosCreateThread to create a thread that doesn't have a
  257.   completely committed stack, that is, if bit 1 of the ulThreadFlags
  258.   argument is zero, or
  259.  
  260. - your program uses emx.dll and the size of the stack object is 16 KB
  261.   or smaller (in this case, a new stack object is allocated and
  262.   managed by emx.dll) -- which is not recommended, or
  263.  
  264. - you want to trap the stack overflow exception issued when hitting
  265.   the guard page at the bottom of the stack.
  266.  
  267. Stack probes are not generated for all allocations of stack space: A
  268. stack probe is not generated if the size is constant and less than
  269. 4096 bytes.  This optimization causes a problem if two such
  270. allocations of stack space occur without access to the stack between
  271. the allocations.  There are two occasions for this: Two calls in a row
  272. to alloca() with constant argument which is less than 4096 and where
  273. nothing is stored to the first pointer returned by alloca() before
  274. getting the second pointer:
  275.  
  276.      p = alloca (0xf00);
  277.      q = alloca (0xf00);
  278.  
  279. The second case is a function with less than 4096 bytes of local data
  280. which calls alloca() with constant argument which is less than 4096
  281. before accessing a local variable or calling a function:
  282.  
  283.     void test (void)
  284.     {
  285.       char local[0xf00], *p;
  286.  
  287.       p = alloca (0xf00);
  288.       /*...*/
  289.     }
  290.  
  291. As both cases are unlikely to occur in practise, I chose to not
  292. generate a stack probe for less than 4096 bytes.  If you experience
  293. problems (that is, stack exceptions), insert the statement
  294.  
  295.     {char *p=alloca (0); *p = 0;}
  296.  
  297. in critical places, as between the two alloca() calls in the first
  298. example and before the alloca() call in the second example.
  299.  
  300. All libraries for emx are compiled with stack probes enabled.
  301.  
  302.  
  303. 2.8 Other changes
  304. -----------------
  305.  
  306. The preprocessor CPP defines the symbols __32BIT__ and __EMX__.  If
  307. the -Zmt option is given on the GCC command line, the symbol __MT__ is
  308. defined.
  309.  
  310. The file name extensions of the debugging output files (-d option)
  311. have been changed as follows:
  312.  
  313.   combine  -> cmb
  314.   cse      -> cs1
  315.   cse2     -> cs2
  316.   flow     -> flo
  317.   greg     -> gre
  318.   jump     -> jp1
  319.   jump2    -> jp2
  320.   loop     -> loo
  321.   lreg     -> lre
  322.   sched    -> sd1
  323.   sched2   -> sd2
  324.   stack    -> stk
  325.  
  326. The extension is added to the base name of the input file, not to the
  327. complete name of the input file.  For instance, when compiling
  328. world.c, the file world.cs1 will be created instead of world.c.cse.
  329. If using the -da GCC option, you should use the -h30 emx option.
  330.  
  331.  
  332. 2.9 Calling conventions
  333. -----------------------
  334.  
  335. The calling convention used by GCC is almost compatible with the
  336. `system' calling convention of IBM C Set/2.  Structures are returned
  337. differently: IBM C Set/2 uses a hidden parameter which is removed from
  338. the stack by the caller, GCC returns the structure in registers EAX
  339. and EDX if its size is 8 bytes or less.  GCC uses a hidden parameter
  340. if the size of the structure is more than 8 bytes, but the callee
  341. removes the hidden parameter from the stack.  Currently, the GCC
  342. option -fpcc-struct-return doesn't solve that problem.  Instead,
  343. rewrite the function and the function call as follows:
  344.  
  345. Original code:
  346. --------------
  347.  
  348. struct s1 func1 (int a1)
  349. {
  350.   struct s1 t1;
  351.   ...
  352.   return (t1);
  353. }
  354.  
  355. ...
  356.  
  357. struct s1 v1;
  358. v1 = f1 (0);
  359.  
  360.  
  361. Modified code:
  362. --------------
  363.  
  364. struct s1 *f1 (struct s1 *ret, int a1)
  365. {
  366.   struct s1 t1;
  367.   ...
  368.   *ret = t1;
  369.   return (ret);
  370. }
  371.  
  372. ...
  373.  
  374. struct s1 v1;
  375. f1 (&v1, 0);
  376.  
  377.  
  378. 3 libg++ -- the GNU C++ library
  379. ===============================
  380.  
  381. libg++, the GNU C++ library, has been ported to emx by Kai Uwe Rommel
  382. (rommel@jonas.gold.sub.org).
  383.  
  384. If you're linking with libg++, (-lgpp), you have to obey the rules of
  385. /emx/doc/copying.lib.
  386.  
  387. Due to name collisions, the following include files have been renamed:
  388.  
  389.   Complex.h   -> Complx.h
  390.   Regex.h     -> Regx.h
  391.   String.h    -> Strng.h
  392.  
  393. All *.C files have been renamed *.cc.  Moreover the following source
  394. files have been renamed:
  395.  
  396.   Complex.C   -> Complx.cc        (/emx/gnu/libg++/src)
  397.   Regex.C     -> Regx.cc          (/emx/gnu/libg++/src)
  398.   String.C    -> Strng.cc         (/emx/gnu/libg++/src)
  399.   Filebuf.h   -> Filebuff.h       (/emx/gnu/libg++/old-stream)
  400.   Filebuf.C   -> Filebuff.cc      (/emx/gnu/libg++/old-stream)
  401.   Dirent.h    -> Direntr.h        (/emx/gnu/libg++/etc/lf)
  402.   Dirent.C    -> Direntr.cc       (/emx/gnu/libg++/etc/lf)
  403.  
  404.  
  405. 4 GDB -- debugging programs
  406. ===========================
  407.  
  408. GDB uses readline, see below.  GDB works only with a.out files and
  409. bound files, not with arbitrary DOS or OS/2 progams.
  410.  
  411. Example (debug myprog.exe):
  412.  
  413.    C> gcc -g -o myprog.exe myprog.c                     (compile)
  414.    C> gdb myprog.exe                                    (start debugger)
  415.    (gdb) b main                                         (set breakpoint)
  416.    (gdb) run                                            (start program)
  417.    (gdb) s                                              (step)
  418.  
  419. Don't use backslashes in path names.
  420.  
  421. The following GDB commands do not work or do not work completely or
  422. have been changed:
  423.  
  424. - `signal' does not work
  425.  
  426. - `handle' is not tested and won't work
  427.  
  428. - `attach' and `detach' cannot work
  429.  
  430. - `tty' and `term-status' are not implemented
  431.  
  432. - `directory' has been changed to use semicolons instead of colons for
  433.   separating directories.
  434.  
  435. - `watch' is almost unusable because GDB disables the watchpoints as
  436.   soon as a function without debugging symbols is called, such as the
  437.   system calls.  That could be fixed by making GDB believe that the
  438.   functions in syscalls.s have debugging symbols and making ptrace(9)
  439.   catch calls to __syscall.
  440.  
  441. Continuing debugging after the debuggee got a signal currently does
  442. not work: one of the problems is that ptrace() and GDB don't know
  443. about segmenting.
  444.  
  445. Debugging multi-threaded programs is not yet possible.
  446.  
  447. If you want to run the debuggee in the same OS/2 session (window) as
  448. GDB (for instance if you're running GDB in a full-screen session), use
  449. the -E emx option.  This is also required for earlier OS/2 2.0
  450. releases.
  451.  
  452. By default, GDB selects the child session when executing a CALL
  453. instruction of the inferior process.  Use the `set switch off' command
  454. to disable that feature.  Use `set switch on' to turn on switching to
  455. the child session.  Use `show switch' to display the current setting.
  456. Under DOS, `set switch' is ignored.
  457.  
  458. To debug a Presentation Manager application, run GDB full-screen and
  459. use `set switch on'.  Do not switch to the Presentation Manager
  460. session while the program is stopped!  Otherwise the Presentation
  461. Manager will hang.
  462.  
  463. As import method (I1) uses a JMP instruction instead of a CALL
  464. instruction to call OS/2 API functions, the `stepi' command must not
  465. be used to step into the code generated by emximp for a method (I1)
  466. import.  Use `nexti' on the call to that code, instead.
  467.  
  468. Use the `set close' command to control whether to close the child
  469. session window after termination of the debuggee.  `set close off' is
  470. the default -- the window will stay open.  After the debuggee has been
  471. started, `set close' doesn't take effect.
  472.  
  473. The .gdbinit file has been renamed !gdbinit.  To save typing, you
  474. might want to create a file named !gdbinit in the directory where
  475. you're debugging.  Here's an example of a !gdbinit file:
  476.  
  477.     file myprog.exe
  478.     set arg -o test.out test.inp
  479.     b main
  480.     set close on
  481.     run
  482.     set switch off
  483.  
  484. Hint: to debug an .exe file which doesn't have a symbol table use
  485. the symbol table from the a.out file and type
  486.  
  487.     gdb -e myprog.exe -s myprog
  488.  
  489. You can do post-mortem debugging by using the `core' file written by
  490. emx when a program aborts.
  491.  
  492. You can use the following redirection specifications with `set args':
  493.  
  494.   <filename     Redirect the file named FILENAME to stdin
  495.   >filename     Redirect stdout to the file named FILENAME, overwriting
  496.   >>filename    Redirect stdout to the file named FILENAME, appending
  497.  
  498. You can prepend a handle number (0 to 9) to such a redirection
  499. specification; for instance
  500.  
  501.   2>filename
  502.  
  503. redirects stderr to FILENAME.  Quoting with quotation marks is not
  504. (yet) implemented.  Example:
  505.  
  506.   set args first_arg second_arg <input >output 2>error
  507.  
  508.  
  509. 5 GAS -- assembling
  510. ===================
  511.  
  512. GAS is the GNU assembler.  The executable file name of GAS is as.exe.
  513.  
  514. The emx port of GAS includes an additional command line option:
  515.  
  516. -w instructs GAS to insert a wait instruction if a 387 instruction
  517. (beginning with `f') is followed by a 386 instruction (not beginning
  518. with `f').  The wait instruction is not required as all numeric
  519. exceptions are masked.
  520.  
  521.  
  522. 6 ld -- linking
  523. ===============
  524.  
  525. ld is the GNU linker.
  526.  
  527. If the output file has an .exe or .dll extension, emxbind will
  528. automatically be called to bind emxl.exe and the a.out file into an
  529. .exe or .dll file.  The output file name without .exe or .dll
  530. extension is used for the a.out file which will be deleted after
  531. converting to .exe or .dll format.  emxl.exe is sought in the
  532. directories listed in the EMXPATH and PATH environment variables, and
  533. in /emx/bin.  See /emx/gnu/binutils/ld.c for command line options.  ld
  534. is usually called only by GCC, not from the command line.
  535.  
  536. The -s option (strip symbols) is passed on to emxbind.  If ld doesn't
  537. call emxbind, ld will strip the symbol table.  Unfortunately, ld
  538. doesn't correctly strip the symbol table.
  539.  
  540. This port of ld supports an additional command line option: -R for
  541. creating relocatable executable files.  -R is automatically set if the
  542. output file has a .dll extension.  -R is also automatically set if an
  543. import definition of type (I2) is referenced.  This is used to import
  544. functions from dynamic link libraries.  If you link with import
  545. definitions of type (I1), you have to manually supply the -R option.
  546.  
  547. If a file name with .def extension is given on the ld command line, it
  548. will be passed as module definition file (-d option) to emxbind.  If
  549. there is no .def file on the command line and the output file is a
  550. .dll file, the -d option without argument is passed to emxbind;
  551. emxbind will use the name of the output file (with .def extension) for
  552. the module definition file.
  553.  
  554. If a file name with .res extension is given on the ld command line, it
  555. will be passed as resource file (-r option) to emxbind.
  556.  
  557. Note that the sequence of .o and .a files and -l options is essential.
  558. crt0.o or dll0.o must come first.  Libraries are considered only once,
  559. that is, if a library references symbols defined in another library,
  560. the former one must be used before the latter one.  If library lib1.a
  561. uses library lib2.a, which in turn uses library lib1.a, you have to
  562. use -l1 -l2 -l1.
  563.  
  564.  
  565. 7 ar -- managing libraries
  566. ==========================
  567.  
  568. `ar s' won't work if the archive already contains __.SYMDEF.
  569. Use `ar d mylib.a __.SYMDEF' first.
  570.  
  571. `ar q' doesn't work due to file sharing problems (Unix hacks in ar).
  572. Use `ar r' instead.
  573.  
  574. See /emx/gnu/binutils/ar.c for command line options.  ar supports
  575. response files and wildcards on the command line.
  576.  
  577. See the makefiles in emxlib.zip for examples.
  578.  
  579.  
  580. 8 ranlib
  581. ========
  582.  
  583. Not available.  `ar s' is used instead.
  584.  
  585.  
  586. 9 nm -- listing symbols
  587. =======================
  588.  
  589. Lists symbols of an a.out or bound .exe file.  As there is no manual,
  590. read /emx/gnu/binutils/nm.c for command line options.
  591.  
  592. A command line option has been added:
  593.  
  594. -d  don't demangle C++ symbols  (long name: +no-demangle)
  595.  
  596.  
  597. 10 strip -- removing the symbol table
  598. ====================================
  599.  
  600. strip is used to delete symbols from an a.out file.  It cannot be
  601. applied to bound .exe files.  See /emx/gnu/binutils/strip.c for
  602. command line options.  See also emxbind (-s command and -s option).
  603.  
  604.  
  605. 11 info -- browsing info files
  606. ==============================
  607.  
  608. Before using info, you have to install termcap.  This is done by
  609. setting the TERM environment variable and one of the following
  610. environment variables: INIT, EMXETC, TERMCAP.  Here's an example:
  611.  
  612.     set term=mono
  613.     set termcap=c:/emx/etc/termcap.dat
  614.  
  615. Then, you have to set the INFOPATH environment variable.  It's a list
  616. of directories, separated by semicolons.  The /emx/info directory
  617. should be included.  Example:
  618.  
  619.     set infopath=c:/emx/info
  620.  
  621. If the INFOPATH environment variable is not set, the following list of
  622. directories will be used:
  623.  
  624.     .;/emx/info;/emacs/info
  625.  
  626. After setting all the environment variables, you can run info by
  627. typing
  628.  
  629.     info
  630.  
  631. Type ? to get a short list of keys.  Type H to invoke the tutorial.
  632.  
  633. In addition to the standard keys, the following keys are supported:
  634.  
  635.   Addition key        Original key     Description
  636.   ------------------------------------------------
  637.   F1                  ?                List of commands
  638.   UP, BACKTAB         N/A              Move to previous menu choice
  639.   DOWN, TAB           N/A              Move to next menu choice
  640.   RETURN              N/A              Select highlighted menu choice
  641.   C-HOME              d                Move to the directory node
  642.   LEFT                p                Move to the previous node
  643.   RIGHT               n                Move to the next node
  644.   C-UP                u                Move up from current node
  645.   C-DOWN              f                Follow a cross reference
  646.   PAGEDOWN            SPACE            Scroll forward a page
  647.   PAGEUP              DEL              Scroll backward a page
  648.   HOME                b                Go to the beginning of the node
  649.  
  650. Press the BACKSPACE key to generate the DEL code.
  651.  
  652. If the TERM environment variable is not set, info asks for the
  653. terminal type but doesn't work correctly.  Always set TERM.
  654.  
  655.  
  656. 12 makeinfo -- creating info files
  657. ==================================
  658.  
  659. makeinfo creates info files from texinfo files.  Type makeinfo to get
  660. a list of options.
  661.  
  662. When splitting files, makeinfo uses the extensions i01, i02, ..., i99.
  663.  
  664.  
  665. 13 texindex -- creating index for printed manual
  666. ================================================
  667.  
  668. texindex sorts the index for typesetting a texinfo file with TeX.  To
  669. compile a texinfo file under OS/2, simply move to the directory where
  670. the source file resides and enter
  671.  
  672.     texi2dvi filename
  673.  
  674. where filename is the name of the source file.  Example:
  675.  
  676.     cd \emx\gnu\texinfo
  677.     texi2dvi texinfo2.txi
  678.  
  679.  
  680. texi2dvi is a REXX procedure which calls TeX and texinfo.  See the
  681. first two statements of /emx/bin/texi2dvi.cmd for customization.
  682.  
  683.  
  684. 14 termcap -- terminal capabilities
  685. ===================================
  686.  
  687. For using termcap, you have to put termcap.dat in the current working
  688. directory, into directory /emx/etc on the current drive, or into a
  689. directory listed in the INIT or EMXETC environment variables.  You can
  690. also set the TERMCAP environment variable to contain the absolute path
  691. name of termcap.dat.  If the TERM environment variable isn't set, ansi
  692. will be used (ANSI.SYS required).  Otherwise, the terminal given in
  693. the TERM environment variable will be used.  I recommend using mono.
  694. See termcap.dat for details.
  695.  
  696. To link a program with the GNU termcap library, specify -ltermc on the
  697. GCC command line.  Read the license in /emx/gnu/termcap/termcap.c or
  698. /emx/doc/copying!
  699.  
  700.  
  701. 15 readline
  702. ===========
  703.  
  704. The standard Emacs/readline key bindings are used with the following
  705. exceptions and additions:
  706.  
  707.     BS, C-H         rubout
  708.     HOME            beg_of_line
  709.     END             end_of_line
  710.     UP              get_previous_history
  711.     DOWN            get_next_history
  712.     LEFT            backward
  713.     RIGHT           forward
  714.     PAGEUP          beginning_of_history
  715.     PAGEDOWN        end_of_history
  716.     DELETE          delete
  717.     C-LEFT          backward_word
  718.     C-RIGHT         forward_word
  719.     C-HOME          backward_kill_line
  720.     C-END           kill_line
  721.  
  722. The readline library source comes with the GDB source files.
  723.  
  724.  
  725. 16 Known problems
  726. =================
  727.  
  728. - the -s option of GNU ld doesn't work correctly -- nm etc. don't
  729.   work on files created by ld if the -s option is used
  730.  
  731. - GCC 2.3.3 cannot pass more than 24 (temporary) files derived by the
  732.   GCC command from source files to the linker
  733.  
  734. - info doesn't work correctly if the TERM environment variable is not
  735.   set
  736.  
  737. - GCC 2.3.3 fails to generate line number information for loops of the
  738.   following type:
  739.  
  740.       for (i = 0; i < 100; ++i)
  741.         do_something (i);
  742.  
  743.   You cannot step into the loop; the complete loop will be executed
  744.   instead of one iteration.  A workaround is to rewrite the code as
  745.   follows:
  746.  
  747.       for (i = 0; i < 100; ++i)
  748.         {
  749.           do_something (i);
  750.         }
  751.  
  752. --------------------------- END OF GNUDEV.DOC ------------------------------
  753.