dumps.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /* dumps.c - print data about symbols and modules for linker */
  2. /* Copyright (C) 1994 Bruce Evans */
  3. #include "syshead.h"
  4. #include "const.h"
  5. #include "obj.h"
  6. #include "type.h"
  7. #include "globvar.h"
  8. /* print list of modules and whether they are loaded */
  9. PUBLIC void dumpmods()
  10. {
  11. struct modstruct *modptr;
  12. char *s, *d;
  13. int i;
  14. for (modptr = modfirst; modptr != NUL_PTR; modptr = modptr->modnext)
  15. {
  16. for(s=d=modptr->filename; *s ; s++)
  17. if( *s == '/' ) d=s+1;
  18. if( memcmp(d, "libc", 4) == 0 && !modptr->loadflag ) continue;
  19. putstr(modptr->modname);
  20. i = strlen(modptr->modname);
  21. while(i<16) putbyte(' '),i++;
  22. putbyte( modptr->loadflag ? '+':'-' );
  23. putstr(d);
  24. if( modptr->archentry )
  25. {
  26. putbyte('(');
  27. putstr(modptr->archentry);
  28. putbyte(')');
  29. }
  30. putbyte('\n');
  31. }
  32. }
  33. /* print data about symbols (in loaded modules only) */
  34. PUBLIC void dumpsyms()
  35. {
  36. flags_t flags;
  37. struct modstruct *modptr;
  38. struct symstruct **symparray;
  39. struct symstruct *symptr;
  40. char uflag;
  41. for (modptr = modfirst; modptr != NUL_PTR; modptr = modptr->modnext)
  42. if (modptr->loadflag)
  43. {
  44. for (symparray = modptr->symparray;
  45. (symptr = *symparray) != NUL_PTR; ++symparray)
  46. if (symptr->modptr == modptr)
  47. {
  48. uflag = FALSE;
  49. if (((flags = symptr->flags) & (C_MASK | I_MASK)) == I_MASK)
  50. uflag = TRUE;
  51. putbstr(20, uflag ? "" : modptr->modname);
  52. putstr(" ");
  53. putbstr(20, symptr->name);
  54. putstr(" ");
  55. putbyte(hexdigit[flags & SEGM_MASK]);
  56. putstr(" ");
  57. if (uflag)
  58. putstr(" ");
  59. else
  60. #ifdef LONG_OFFSETS
  61. put08lx(symptr->value);
  62. #else
  63. put08x(symptr->value);
  64. #endif
  65. if( flags & (E_MASK|C_MASK) )
  66. putstr(flags & A_MASK ? " A" : " R");
  67. else
  68. putstr(flags & A_MASK ? " a" : " r");
  69. if (uflag)
  70. putstr(" U");
  71. if (flags & C_MASK)
  72. putstr(" C");
  73. if (flags & N_MASK)
  74. putstr(" N");
  75. putbyte('\n');
  76. }
  77. }
  78. putstr("Total memory used: ");
  79. #ifdef LONG_OFFSETS
  80. put08lx(memory_used());
  81. #else
  82. put08x(memory_used());
  83. #endif
  84. putbyte('\n');
  85. }