public inbox for archer-commits@sourceware.org help / color / mirror / Atom feed
From: jkratoch@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] users/jkratoch/dwarf5gcc-indexcxx-debugnames: . Date: Sat, 24 Dec 2016 23:44:00 -0000 [thread overview] Message-ID: <20161224234426.117624.qmail@sourceware.org> (raw) The branch, users/jkratoch/dwarf5gcc-indexcxx-debugnames has been updated via 008befe725efec8e18eedc4200cfbe765affbc0e (commit) via db14cf485d74e9888d88cca68a47c48d031ccfe6 (commit) via 98ed76513a7ab004c13386689be1d7f32d9fc868 (commit) via 5532b1e372a5738788d0898c8d73bb5c8728c9ec (commit) from b4a7a7a9e2667da102466acab515189a993074ad (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 008befe725efec8e18eedc4200cfbe765affbc0e Author: Jan Kratochvil <jan.kratochvil@redhat.com> Date: Sun Dec 25 00:42:45 2016 +0100 . commit db14cf485d74e9888d88cca68a47c48d031ccfe6 Author: Jan Kratochvil <jan.kratochvil@redhat.com> Date: Sun Dec 25 00:34:52 2016 +0100 . commit 98ed76513a7ab004c13386689be1d7f32d9fc868 Author: Jan Kratochvil <jan.kratochvil@redhat.com> Date: Sun Dec 25 00:26:26 2016 +0100 . commit 5532b1e372a5738788d0898c8d73bb5c8728c9ec Author: Jan Kratochvil <jan.kratochvil@redhat.com> Date: Sat Dec 24 22:36:07 2016 +0100 . ----------------------------------------------------------------------- Summary of changes: gdb/dwarf2read.c | 69 ++++++++++++++++++++++++++++++++++------------------- 1 files changed, 44 insertions(+), 25 deletions(-) First 500 lines of diff: diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 6ffeb18..1608339 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -76,6 +76,7 @@ #include <unordered_set> #include <unordered_map> #include <cmath> +#include <locale> typedef struct symbol *symbolp; DEF_VEC_P (symbolp); @@ -2058,6 +2059,7 @@ attr_value_as_address (struct attribute *attr) /* The suffix for an index file. */ #define INDEX_SUFFIX ".gdb-index" +#define DEBUG_STR_SUFFIX ".debug_str" /* Try to locate the sections we need for DWARF 2 debugging information and return true if we have enough to do something. @@ -22606,7 +22608,7 @@ file_write (FILE *file, const void *data, size_t size) template<class Elem> static void file_write (FILE *file, const std::vector<Elem> &vec) { - file_write (file, vec.data (), vec.size()); + file_write (file, vec.data (), vec.size() * sizeof (vec[0])); } class DataBuf @@ -23151,6 +23153,7 @@ class DebugStrLookup private: std::unordered_map<CstrView, size_t> str_table; bfd *const abfd; + DataBuf str_add_buf; public: DebugStrLookup ():abfd (dwarf2_per_objfile->objfile->obfd) { @@ -23173,18 +23176,20 @@ public: } } size_t - lookup (const char *s) const + lookup (const char *s) { const auto it (str_table.find (CstrView (s))); - if (it == str_table.end ()) - { - // FIXME - /*error*/warning (_("Cannot find string \"%s\" in " - ".debug_str section [in module %s]"), - s, bfd_get_filename (abfd)); - return 0; - } - return it->second; + if (it != str_table.end ()) + return it->second; + const size_t offset (dwarf2_per_objfile->str.size + str_add_buf.size ()); + str_table.emplace (CstrView (s), offset); + str_add_buf.add_cstr0 (s); + return offset; + } + void + file_write (FILE *file) const + { + str_add_buf.file_write (file); } }; @@ -23216,21 +23221,25 @@ private: private: std::vector<OffsetSize> vec; public: - virtual void reserve (size_t nelem) override + virtual void + reserve (size_t nelem) override { vec.reserve (nelem); } - virtual void push_back (size_t elem) override + virtual void + push_back (size_t elem) override { vec.push_back (elem); // Check for overflow. gdb_assert (vec.back () == elem); } - virtual size_t bytes () const override + virtual size_t + bytes () const override { return vec.size () * sizeof (vec[0]); } - virtual void file_write (FILE *file) const override + virtual void + file_write (FILE *file) const override { ::file_write (file, vec); } @@ -23257,12 +23266,14 @@ private: OffsetVec &name_table_string_offs, &name_table_entry_offs; std::unordered_set<int> tags_used; DataBuf abbrev_table, entry_pool; + DebugStrLookup debugstrlookup; static uint32_t djb_hash (const unsigned char *str) { uint32_t hash (5381); while (int c = *str++) - hash = hash * 33 + c; + // FIXME: std::bad_cast - std::tolower (c, std::locale::classic ()) + hash = hash * 33 + tolower (c); return hash; } static int @@ -23324,11 +23335,10 @@ public: { gdb_assert (bucket_table.empty ()); bucket_table.resize - (std::pow (2, std::ceil (std::log2 (hash_to_name.size ())))); + (std::pow (2, std::ceil (std::log2 (hash_to_name.size () * 4 / 3)))); hash_table.reserve (hash_to_name.size ()); name_table_string_offs.reserve (hash_to_name.size ()); name_table_entry_offs.reserve (hash_to_name.size ()); - DebugStrLookup debugstrlookup; for (const auto &it:hash_to_name) { const uint32_t hash (it.first); @@ -23346,6 +23356,7 @@ public: entry_pool.add_unsigned_leb128 (0); tags_used.insert (name.tag); } + gdb_assert (hash_table.size () == hash_to_name.size ()); for (const auto tag:tags_used) { // DW_TAG_* numerical value is used also as the value of the index tag. @@ -23359,8 +23370,6 @@ public: } // Terminate tags list. abbrev_table.add_unsigned_leb128 (0); - gdb_assert (hash_table.size () == hash_to_name.size ()); - } uint32_t bucket_count () const @@ -23440,7 +23449,7 @@ public: return expected_bytes; } void - file_write (FILE *file) const + file_write (FILE *file, FILE *file_str) const { gdb_assert (!bucket_table.empty ()); ::file_write (file, bucket_table); @@ -23449,6 +23458,7 @@ public: name_table_entry_offs.file_write (file); abbrev_table.file_write (file); entry_pool.file_write (file); + debugstrlookup.file_write (file_str); } }; @@ -23474,7 +23484,7 @@ check_dwarf64_offsets () } static size_t -write_gdbindex (struct objfile *objfile, FILE *out_file) +write_gdbindex (struct objfile *objfile, FILE *out_file, FILE *out_file_str) { mapped_symtab symtab; DataBuf cu_list; @@ -23581,7 +23591,7 @@ write_gdbindex (struct objfile *objfile, FILE *out_file) } static size_t -write_debug_names (struct objfile *objfile, FILE *out_file) +write_debug_names (struct objfile *objfile, FILE *out_file, FILE *out_file_str) { const bool dwarf5_is_dwarf64 (check_dwarf64_offsets ()); const int dwarf5_offset_size (dwarf5_is_dwarf64 ? 8 : 4); @@ -23694,7 +23704,7 @@ write_debug_names (struct objfile *objfile, FILE *out_file) header.file_write (out_file); cu_list.file_write (out_file); types_cu_list.file_write (out_file); - nametable.file_write (out_file); + nametable.file_write (out_file, out_file_str); return expected_bytes; } @@ -23719,15 +23729,21 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir, bool is_dwarf std::string filename (std::string (dir) + SLASH_STRING + lbasename (objfile_name (objfile)) + INDEX_SUFFIX); + std::string filename_str (std::string (dir) + SLASH_STRING + + lbasename (objfile_name (objfile)) + + DEBUG_STR_SUFFIX); FILE *out_file (gdb_fopen_cloexec (filename.c_str (), "wb")); if (!out_file) error (_("Can't open `%s' for writing"), filename.c_str ()); + FILE *out_file_str (gdb_fopen_cloexec (filename_str.c_str (), "wb")); + if (!out_file_str) + error (_("Can't open `%s' for writing"), filename_str.c_str ()); try { const size_t total_len ((is_dwarf5 ? write_debug_names : write_gdbindex) - (objfile, out_file)); + (objfile, out_file, out_file_str)); const auto out_file_size (ftell (out_file)); if (out_file_size == -1) error (_("Can't get `%s' size"), filename.c_str ()); @@ -23737,9 +23753,12 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir, bool is_dwarf { fclose (out_file); unlink (filename.c_str ()); + fclose (out_file_str); + unlink (filename_str.c_str ()); throw; } fclose (out_file); + fclose (out_file_str); } /* Implementation of the `save gdb-index' command. hooks/post-receive -- Repository for Project Archer.
next reply other threads:[~2016-12-24 23:44 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-12-24 23:44 jkratoch [this message] 2016-12-25 18:31 jkratoch 2017-01-02 21:50 jkratoch
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20161224234426.117624.qmail@sourceware.org \ --to=jkratoch@sourceware.org \ --cc=archer-commits@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).