home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / gnu / gdb / bug / 1354 < prev    next >
Encoding:
Text File  |  1993-01-07  |  5.3 KB  |  191 lines

  1. Newsgroups: gnu.gdb.bug
  2. Path: sparky!uunet!cis.ohio-state.edu!andrew.cmu.edu!rr2b+
  3. From: rr2b+@andrew.cmu.edu (Robert Andrew Ryan)
  4. Subject: rs6000 shared library/dynamic object improvements
  5. Message-ID: <UfGoy3i00Woi1Tzls5@andrew.cmu.edu>
  6. Sender: gnulists@ai.mit.edu
  7. Organization: GNUs Not Usenet
  8. Distribution: gnu
  9. Date: Wed, 6 Jan 1993 11:30:43 GMT
  10. Approved: bug-gdb@prep.ai.mit.edu
  11. Lines: 178
  12.  
  13. The following patch allows the user to treat load(2)ed modules just like
  14. shared libraries.  (e.g. reading symbols for them with the sharedlibrary
  15. command)  The xcoffexec.c patch is the same one I posted previously. 
  16. This supercedes my last post which added a partial implementation of the
  17. load command to achieve the same basic goal.
  18.  
  19. -Rob
  20.  
  21. Wed Jan 06 16:17:55 EST 1993  Rob Ryan  (robr@cmu.edu)
  22.  
  23.     * tm-rs6000.h: Added SOLIB_UPDATE_LIBRARIES macro, used
  24.     by info sharedlibrary and sharedlibrary commands to update
  25.     the list of loaded modules before performing the requested
  26.     functions.  Modified SIGTRAP_STOP_AFTER_LOAD to keep a
  27.     count of the loaded objects, so that the module list only
  28.     gets updated when more modules have been loaded.
  29.     * xcoffexec.c: Fixed bug which would cause the wrong
  30.     modules to be relocated when the sharedlibrary command
  31.     was used on modules with no archive elements.
  32.     * xcoffsolib.c: Added use of SOLIB_UPDATE_LIBRARIES macro.
  33.     Also added definition of xcoffloadcount used to detect
  34.     when the module list needs to be updated.
  35.  
  36. *** tm-rs6000.h.orig    Tue Dec 22 14:33:42 1992
  37. --- tm-rs6000.h    Tue Jan  5 14:12:08 1993
  38. ***************
  39. *** 122,127 ****
  40. --- 122,128 ----
  41.      once. */
  42.   
  43.   extern int loadinfotextindex;
  44. + extern int xcoffloadcount;
  45.   
  46.   #define    SOLIB_CREATE_INFERIOR_HOOK(PID)    \
  47.     do {                    \
  48. ***************
  49. *** 128,135 ****
  50.       if (loadinfotextindex == 0)    \
  51.       xcoff_relocate_symtab (PID);    \
  52.     } while (0)
  53. -     
  54.   
  55.   /* Number of trap signals we need to skip over, once the inferior process
  56.      starts running. */
  57.   
  58. --- 129,147 ----
  59.       if (loadinfotextindex == 0)    \
  60.       xcoff_relocate_symtab (PID);    \
  61.     } while (0)
  62.   
  63. + /* called just before the shared-library and
  64. +  info sharedlibrary commands scan for shared
  65. +  libraries.
  66. +  -Rob Ryan Dec 22,1992 */
  67. + #define SOLIB_UPDATE_LIBRARIES            \
  68. +   do {                        \
  69. +     if (inferior_pid>0 && xcoffloadcount>0) {    \
  70. +       xcoffloadcount=0;                \
  71. +       xcoff_relocate_symtab (inferior_pid);    \
  72. +     }                        \
  73. +   } while (0)
  74.   /* Number of trap signals we need to skip over, once the inferior process
  75.      starts running. */
  76.   
  77. ***************
  78. *** 143,152 ****
  79.   
  80.   #define SIGTRAP_STOP_AFTER_LOAD(W)    \
  81.    if ( (W) == 0x57c || (W) == 0x7f) {    \
  82. !    if ((W)==0x57c && breakpoints_inserted) {    \
  83. !      mark_breakpoints_out ();        \
  84. !      insert_breakpoints ();        \
  85. !      insert_step_breakpoint ();        \
  86.      }                    \
  87.      resume (0, 0);            \
  88.      continue;                \
  89. --- 155,167 ----
  90.   
  91.   #define SIGTRAP_STOP_AFTER_LOAD(W)    \
  92.    if ( (W) == 0x57c || (W) == 0x7f) {    \
  93. !    if ((W)==0x57c) {            \
  94. !      if (breakpoints_inserted) {    \
  95. !        mark_breakpoints_out ();        \
  96. !        insert_breakpoints ();        \
  97. !        insert_step_breakpoint ();    \
  98. !      }                    \
  99. !      xcoffloadcount++;            \
  100.      }                    \
  101.      resume (0, 0);            \
  102.      continue;                \
  103. *** xcoffexec.c.orig    Wed Oct  7 20:31:53 1992
  104. --- xcoffexec.c    Tue Dec 22 13:56:39 1992
  105. ***************
  106. *** 392,398 ****
  107.       } else if (vp->member[0]) {
  108.         /* no match, and member present, not this one. */
  109.         continue;
  110. !     } else {
  111.         struct stat si;
  112.         FILE *io;
  113.         
  114. --- 392,401 ----
  115.       } else if (vp->member[0]) {
  116.         /* no match, and member present, not this one. */
  117.         continue;
  118. !     } else if (vip) {
  119. !          /* if we weren't given a stat structure
  120. !           that doesn't mean any old bfd will match...
  121. !           -Rob Ryan 11/5/92*/
  122.         struct stat si;
  123.         FILE *io;
  124.         
  125. ***************
  126. *** 408,417 ****
  127.         if (fstat(fileno(io), &si) < 0)
  128.           fatal("cannot fstat BFD for sym");
  129.         
  130. !       if (vip && (si.st_dev != vip->st_dev
  131.             || si.st_ino != vip->st_ino))
  132.           continue;
  133. !     }
  134.       
  135.       if (vp->tstart != old_start) {
  136.   
  137. --- 411,420 ----
  138.         if (fstat(fileno(io), &si) < 0)
  139.           fatal("cannot fstat BFD for sym");
  140.         
  141. !       if ((si.st_dev != vip->st_dev
  142.             || si.st_ino != vip->st_ino))
  143.           continue;
  144. !     } else continue;
  145.       
  146.       if (vp->tstart != old_start) {
  147.   
  148. *** xcoffsolib.c.orig    Tue Dec 22 16:28:29 1992
  149. --- xcoffsolib.c    Tue Dec 22 17:15:12 1992
  150. ***************
  151. *** 28,33 ****
  152. --- 28,41 ----
  153.   extern struct symtab *current_source_symtab;
  154.   extern int          current_source_line;
  155.   
  156. + /* this will be incremented by SIGTRAP_AFTER_LOAD
  157. +  when new modules are loaded.  SOLIB_UPDATE_LIBRARIES
  158. +  will update gdb's list of loaded modules when this
  159. +  count is >0
  160. +  -Rob Ryan Dec 22, 1992
  161. +  */
  162. + int xcoffloadcount=0;
  163.   /* The real work of adding a shared library file to the symtab and
  164.      the section list.  */
  165.   
  166. ***************
  167. *** 46,51 ****
  168. --- 54,61 ----
  169.     int loaded = 0;            /* true if any shared obj loaded */
  170.     int matched = 0;            /* true if any shared obj matched */
  171.   
  172. +   SOLIB_UPDATE_LIBRARIES;
  173. +   
  174.     if (arg_string == 0)
  175.         re_comp (".");
  176.     else if (val = (char *) re_comp (arg_string)) {
  177. ***************
  178. *** 148,153 ****
  179. --- 158,165 ----
  180.   
  181.      struct vmap *vp = vmap;
  182.   
  183. +    SOLIB_UPDATE_LIBRARIES;
  184. +    
  185.      if (!vp || !vp->nxt) {
  186.        printf("No shared libraries loaded at this time.\n");    
  187.        return;
  188.  
  189.