Print symbol table statistics with --stats.
authorIan Lance Taylor <iant@google.com>
Tue, 4 Dec 2007 23:11:35 +0000 (23:11 +0000)
committerIan Lance Taylor <iant@google.com>
Tue, 4 Dec 2007 23:11:35 +0000 (23:11 +0000)
gold/main.cc
gold/symtab.cc
gold/symtab.h

index a4dcc5a42a5302ff0dc23ad363edd13f7d1510f4..fe56aade444a0a2f2ccfd72d617d7fddaaa6500a 100644 (file)
@@ -106,6 +106,7 @@ main(int argc, char** argv)
       File_read::print_stats();
       fprintf(stderr, _("%s: output file size: %lld bytes\n"),
              program_name, static_cast<long long>(layout.output_file_size()));
+      symtab.print_stats();
     }
 
   gold_exit(errors.error_count() == 0);
index b2901ab9faa617eb8b231b10e4485d0fd05ebdf8..6094c2af1e08b40bcae0573746220999966f4b5f 100644 (file)
@@ -1897,6 +1897,20 @@ Symbol_table::sized_write_section_symbol(const Output_section* os,
   of->write_output_view(offset, sym_size, pov);
 }
 
+// Print statistical information to stderr.  This is used for --stats.
+
+void
+Symbol_table::print_stats() const
+{
+#if defined(HAVE_TR1_UNORDERED_MAP) || defined(HAVE_EXT_HASH_MAP)
+  fprintf(stderr, _("%s: symbol table entries: %zu; buckets: %zu\n"),
+         program_name, this->table_.size(), this->table_.bucket_count());
+#else
+  fprintf(stderr, _("%s: symbol table entries: %zu\n"),
+         program_name, this->table_.size());
+#endif
+}
+
 // We check for ODR violations by looking for symbols with the same
 // name for which the debugging information reports that they were
 // defined in different source locations.  When comparing the source
index 9c7fb0935c747bb921a68a25eb0dcfd8bfd65036..6d2577bbdd1c3576f5868b6ea40c319840c4e9db 100644 (file)
@@ -1127,6 +1127,10 @@ class Symbol_table
   void
   write_section_symbol(const Output_section*, Output_file*, off_t) const;
 
+  // Dump statistical information to stderr.
+  void
+  print_stats() const;
+
  private:
   Symbol_table(const Symbol_table&);
   Symbol_table& operator=(const Symbol_table&);