Fix -D_GLIBCXX_DEBUG gdb-add-index regression
[external/binutils.git] / gdb / dwarf-index-write.c
1 /* DWARF index writing support for GDB.
2
3    Copyright (C) 1994-2018 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21
22 #include "addrmap.h"
23 #include "cli/cli-decode.h"
24 #include "common/byte-vector.h"
25 #include "common/filestuff.h"
26 #include "common/gdb_unlinker.h"
27 #include "complaints.h"
28 #include "dwarf-index-common.h"
29 #include "dwarf2.h"
30 #include "dwarf2read.h"
31 #include "gdb/gdb-index.h"
32 #include "gdbcmd.h"
33 #include "objfiles.h"
34 #include "psympriv.h"
35
36 #include <algorithm>
37 #include <cmath>
38 #include <set>
39 #include <unordered_map>
40 #include <unordered_set>
41
42 /* The suffix for an index file.  */
43 #define INDEX4_SUFFIX ".gdb-index"
44 #define INDEX5_SUFFIX ".debug_names"
45 #define DEBUG_STR_SUFFIX ".debug_str"
46
47 /* Ensure only legit values are used.  */
48 #define DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE(cu_index, value) \
49   do { \
50     gdb_assert ((unsigned int) (value) <= 1); \
51     GDB_INDEX_SYMBOL_STATIC_SET_VALUE((cu_index), (value)); \
52   } while (0)
53
54 /* Ensure only legit values are used.  */
55 #define DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE(cu_index, value) \
56   do { \
57     gdb_assert ((value) >= GDB_INDEX_SYMBOL_KIND_TYPE \
58                 && (value) <= GDB_INDEX_SYMBOL_KIND_OTHER); \
59     GDB_INDEX_SYMBOL_KIND_SET_VALUE((cu_index), (value)); \
60   } while (0)
61
62 /* Ensure we don't use more than the alloted nuber of bits for the CU.  */
63 #define DW2_GDB_INDEX_CU_SET_VALUE(cu_index, value) \
64   do { \
65     gdb_assert (((value) & ~GDB_INDEX_CU_MASK) == 0); \
66     GDB_INDEX_CU_SET_VALUE((cu_index), (value)); \
67   } while (0)
68
69 /* The "save gdb-index" command.  */
70
71 /* Write SIZE bytes from the buffer pointed to by DATA to FILE, with
72    error checking.  */
73
74 static void
75 file_write (FILE *file, const void *data, size_t size)
76 {
77   if (fwrite (data, 1, size, file) != size)
78     error (_("couldn't data write to file"));
79 }
80
81 /* Write the contents of VEC to FILE, with error checking.  */
82
83 template<typename Elem, typename Alloc>
84 static void
85 file_write (FILE *file, const std::vector<Elem, Alloc> &vec)
86 {
87   file_write (file, vec.data (), vec.size () * sizeof (vec[0]));
88 }
89
90 /* In-memory buffer to prepare data to be written later to a file.  */
91 class data_buf
92 {
93 public:
94   /* Copy DATA to the end of the buffer.  */
95   template<typename T>
96   void append_data (const T &data)
97   {
98     std::copy (reinterpret_cast<const gdb_byte *> (&data),
99                reinterpret_cast<const gdb_byte *> (&data + 1),
100                grow (sizeof (data)));
101   }
102
103   /* Copy CSTR (a zero-terminated string) to the end of buffer.  The
104      terminating zero is appended too.  */
105   void append_cstr0 (const char *cstr)
106   {
107     const size_t size = strlen (cstr) + 1;
108     std::copy (cstr, cstr + size, grow (size));
109   }
110
111   /* Store INPUT as ULEB128 to the end of buffer.  */
112   void append_unsigned_leb128 (ULONGEST input)
113   {
114     for (;;)
115       {
116         gdb_byte output = input & 0x7f;
117         input >>= 7;
118         if (input)
119           output |= 0x80;
120         append_data (output);
121         if (input == 0)
122           break;
123       }
124   }
125
126   /* Accept a host-format integer in VAL and append it to the buffer
127      as a target-format integer which is LEN bytes long.  */
128   void append_uint (size_t len, bfd_endian byte_order, ULONGEST val)
129   {
130     ::store_unsigned_integer (grow (len), len, byte_order, val);
131   }
132
133   /* Return the size of the buffer.  */
134   size_t size () const
135   {
136     return m_vec.size ();
137   }
138
139   /* Return true iff the buffer is empty.  */
140   bool empty () const
141   {
142     return m_vec.empty ();
143   }
144
145   /* Write the buffer to FILE.  */
146   void file_write (FILE *file) const
147   {
148     ::file_write (file, m_vec);
149   }
150
151 private:
152   /* Grow SIZE bytes at the end of the buffer.  Returns a pointer to
153      the start of the new block.  */
154   gdb_byte *grow (size_t size)
155   {
156     m_vec.resize (m_vec.size () + size);
157     return &*(m_vec.end () - size);
158   }
159
160   gdb::byte_vector m_vec;
161 };
162
163 /* An entry in the symbol table.  */
164 struct symtab_index_entry
165 {
166   /* The name of the symbol.  */
167   const char *name;
168   /* The offset of the name in the constant pool.  */
169   offset_type index_offset;
170   /* A sorted vector of the indices of all the CUs that hold an object
171      of this name.  */
172   std::vector<offset_type> cu_indices;
173 };
174
175 /* The symbol table.  This is a power-of-2-sized hash table.  */
176 struct mapped_symtab
177 {
178   mapped_symtab ()
179   {
180     data.resize (1024);
181   }
182
183   offset_type n_elements = 0;
184   std::vector<symtab_index_entry> data;
185 };
186
187 /* Find a slot in SYMTAB for the symbol NAME.  Returns a reference to
188    the slot.
189
190    Function is used only during write_hash_table so no index format backward
191    compatibility is needed.  */
192
193 static symtab_index_entry &
194 find_slot (struct mapped_symtab *symtab, const char *name)
195 {
196   offset_type index, step, hash = mapped_index_string_hash (INT_MAX, name);
197
198   index = hash & (symtab->data.size () - 1);
199   step = ((hash * 17) & (symtab->data.size () - 1)) | 1;
200
201   for (;;)
202     {
203       if (symtab->data[index].name == NULL
204           || strcmp (name, symtab->data[index].name) == 0)
205         return symtab->data[index];
206       index = (index + step) & (symtab->data.size () - 1);
207     }
208 }
209
210 /* Expand SYMTAB's hash table.  */
211
212 static void
213 hash_expand (struct mapped_symtab *symtab)
214 {
215   auto old_entries = std::move (symtab->data);
216
217   symtab->data.clear ();
218   symtab->data.resize (old_entries.size () * 2);
219
220   for (auto &it : old_entries)
221     if (it.name != NULL)
222       {
223         auto &ref = find_slot (symtab, it.name);
224         ref = std::move (it);
225       }
226 }
227
228 /* Add an entry to SYMTAB.  NAME is the name of the symbol.
229    CU_INDEX is the index of the CU in which the symbol appears.
230    IS_STATIC is one if the symbol is static, otherwise zero (global).  */
231
232 static void
233 add_index_entry (struct mapped_symtab *symtab, const char *name,
234                  int is_static, gdb_index_symbol_kind kind,
235                  offset_type cu_index)
236 {
237   offset_type cu_index_and_attrs;
238
239   ++symtab->n_elements;
240   if (4 * symtab->n_elements / 3 >= symtab->data.size ())
241     hash_expand (symtab);
242
243   symtab_index_entry &slot = find_slot (symtab, name);
244   if (slot.name == NULL)
245     {
246       slot.name = name;
247       /* index_offset is set later.  */
248     }
249
250   cu_index_and_attrs = 0;
251   DW2_GDB_INDEX_CU_SET_VALUE (cu_index_and_attrs, cu_index);
252   DW2_GDB_INDEX_SYMBOL_STATIC_SET_VALUE (cu_index_and_attrs, is_static);
253   DW2_GDB_INDEX_SYMBOL_KIND_SET_VALUE (cu_index_and_attrs, kind);
254
255   /* We don't want to record an index value twice as we want to avoid the
256      duplication.
257      We process all global symbols and then all static symbols
258      (which would allow us to avoid the duplication by only having to check
259      the last entry pushed), but a symbol could have multiple kinds in one CU.
260      To keep things simple we don't worry about the duplication here and
261      sort and uniqufy the list after we've processed all symbols.  */
262   slot.cu_indices.push_back (cu_index_and_attrs);
263 }
264
265 /* Sort and remove duplicates of all symbols' cu_indices lists.  */
266
267 static void
268 uniquify_cu_indices (struct mapped_symtab *symtab)
269 {
270   for (auto &entry : symtab->data)
271     {
272       if (entry.name != NULL && !entry.cu_indices.empty ())
273         {
274           auto &cu_indices = entry.cu_indices;
275           std::sort (cu_indices.begin (), cu_indices.end ());
276           auto from = std::unique (cu_indices.begin (), cu_indices.end ());
277           cu_indices.erase (from, cu_indices.end ());
278         }
279     }
280 }
281
282 /* A form of 'const char *' suitable for container keys.  Only the
283    pointer is stored.  The strings themselves are compared, not the
284    pointers.  */
285 class c_str_view
286 {
287 public:
288   c_str_view (const char *cstr)
289     : m_cstr (cstr)
290   {}
291
292   bool operator== (const c_str_view &other) const
293   {
294     return strcmp (m_cstr, other.m_cstr) == 0;
295   }
296
297   /* Return the underlying C string.  Note, the returned string is
298      only a reference with lifetime of this object.  */
299   const char *c_str () const
300   {
301     return m_cstr;
302   }
303
304 private:
305   friend class c_str_view_hasher;
306   const char *const m_cstr;
307 };
308
309 /* A std::unordered_map::hasher for c_str_view that uses the right
310    hash function for strings in a mapped index.  */
311 class c_str_view_hasher
312 {
313 public:
314   size_t operator () (const c_str_view &x) const
315   {
316     return mapped_index_string_hash (INT_MAX, x.m_cstr);
317   }
318 };
319
320 /* A std::unordered_map::hasher for std::vector<>.  */
321 template<typename T>
322 class vector_hasher
323 {
324 public:
325   size_t operator () (const std::vector<T> &key) const
326   {
327     return iterative_hash (key.data (),
328                            sizeof (key.front ()) * key.size (), 0);
329   }
330 };
331
332 /* Write the mapped hash table SYMTAB to the data buffer OUTPUT, with
333    constant pool entries going into the data buffer CPOOL.  */
334
335 static void
336 write_hash_table (mapped_symtab *symtab, data_buf &output, data_buf &cpool)
337 {
338   {
339     /* Elements are sorted vectors of the indices of all the CUs that
340        hold an object of this name.  */
341     std::unordered_map<std::vector<offset_type>, offset_type,
342                        vector_hasher<offset_type>>
343       symbol_hash_table;
344
345     /* We add all the index vectors to the constant pool first, to
346        ensure alignment is ok.  */
347     for (symtab_index_entry &entry : symtab->data)
348       {
349         if (entry.name == NULL)
350           continue;
351         gdb_assert (entry.index_offset == 0);
352
353         /* Finding before inserting is faster than always trying to
354            insert, because inserting always allocates a node, does the
355            lookup, and then destroys the new node if another node
356            already had the same key.  C++17 try_emplace will avoid
357            this.  */
358         const auto found
359           = symbol_hash_table.find (entry.cu_indices);
360         if (found != symbol_hash_table.end ())
361           {
362             entry.index_offset = found->second;
363             continue;
364           }
365
366         symbol_hash_table.emplace (entry.cu_indices, cpool.size ());
367         entry.index_offset = cpool.size ();
368         cpool.append_data (MAYBE_SWAP (entry.cu_indices.size ()));
369         for (const auto index : entry.cu_indices)
370           cpool.append_data (MAYBE_SWAP (index));
371       }
372   }
373
374   /* Now write out the hash table.  */
375   std::unordered_map<c_str_view, offset_type, c_str_view_hasher> str_table;
376   for (const auto &entry : symtab->data)
377     {
378       offset_type str_off, vec_off;
379
380       if (entry.name != NULL)
381         {
382           const auto insertpair = str_table.emplace (entry.name, cpool.size ());
383           if (insertpair.second)
384             cpool.append_cstr0 (entry.name);
385           str_off = insertpair.first->second;
386           vec_off = entry.index_offset;
387         }
388       else
389         {
390           /* While 0 is a valid constant pool index, it is not valid
391              to have 0 for both offsets.  */
392           str_off = 0;
393           vec_off = 0;
394         }
395
396       output.append_data (MAYBE_SWAP (str_off));
397       output.append_data (MAYBE_SWAP (vec_off));
398     }
399 }
400
401 typedef std::unordered_map<partial_symtab *, unsigned int> psym_index_map;
402
403 /* Helper struct for building the address table.  */
404 struct addrmap_index_data
405 {
406   addrmap_index_data (data_buf &addr_vec_, psym_index_map &cu_index_htab_)
407     : addr_vec (addr_vec_), cu_index_htab (cu_index_htab_)
408   {}
409
410   struct objfile *objfile;
411   data_buf &addr_vec;
412   psym_index_map &cu_index_htab;
413
414   /* Non-zero if the previous_* fields are valid.
415      We can't write an entry until we see the next entry (since it is only then
416      that we know the end of the entry).  */
417   int previous_valid;
418   /* Index of the CU in the table of all CUs in the index file.  */
419   unsigned int previous_cu_index;
420   /* Start address of the CU.  */
421   CORE_ADDR previous_cu_start;
422 };
423
424 /* Write an address entry to ADDR_VEC.  */
425
426 static void
427 add_address_entry (struct objfile *objfile, data_buf &addr_vec,
428                    CORE_ADDR start, CORE_ADDR end, unsigned int cu_index)
429 {
430   CORE_ADDR baseaddr;
431
432   baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
433
434   addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, start - baseaddr);
435   addr_vec.append_uint (8, BFD_ENDIAN_LITTLE, end - baseaddr);
436   addr_vec.append_data (MAYBE_SWAP (cu_index));
437 }
438
439 /* Worker function for traversing an addrmap to build the address table.  */
440
441 static int
442 add_address_entry_worker (void *datap, CORE_ADDR start_addr, void *obj)
443 {
444   struct addrmap_index_data *data = (struct addrmap_index_data *) datap;
445   struct partial_symtab *pst = (struct partial_symtab *) obj;
446
447   if (data->previous_valid)
448     add_address_entry (data->objfile, data->addr_vec,
449                        data->previous_cu_start, start_addr,
450                        data->previous_cu_index);
451
452   data->previous_cu_start = start_addr;
453   if (pst != NULL)
454     {
455       const auto it = data->cu_index_htab.find (pst);
456       gdb_assert (it != data->cu_index_htab.cend ());
457       data->previous_cu_index = it->second;
458       data->previous_valid = 1;
459     }
460   else
461     data->previous_valid = 0;
462
463   return 0;
464 }
465
466 /* Write OBJFILE's address map to ADDR_VEC.
467    CU_INDEX_HTAB is used to map addrmap entries to their CU indices
468    in the index file.  */
469
470 static void
471 write_address_map (struct objfile *objfile, data_buf &addr_vec,
472                    psym_index_map &cu_index_htab)
473 {
474   struct addrmap_index_data addrmap_index_data (addr_vec, cu_index_htab);
475
476   /* When writing the address table, we have to cope with the fact that
477      the addrmap iterator only provides the start of a region; we have to
478      wait until the next invocation to get the start of the next region.  */
479
480   addrmap_index_data.objfile = objfile;
481   addrmap_index_data.previous_valid = 0;
482
483   addrmap_foreach (objfile->psymtabs_addrmap, add_address_entry_worker,
484                    &addrmap_index_data);
485
486   /* It's highly unlikely the last entry (end address = 0xff...ff)
487      is valid, but we should still handle it.
488      The end address is recorded as the start of the next region, but that
489      doesn't work here.  To cope we pass 0xff...ff, this is a rare situation
490      anyway.  */
491   if (addrmap_index_data.previous_valid)
492     add_address_entry (objfile, addr_vec,
493                        addrmap_index_data.previous_cu_start, (CORE_ADDR) -1,
494                        addrmap_index_data.previous_cu_index);
495 }
496
497 /* Return the symbol kind of PSYM.  */
498
499 static gdb_index_symbol_kind
500 symbol_kind (struct partial_symbol *psym)
501 {
502   domain_enum domain = PSYMBOL_DOMAIN (psym);
503   enum address_class aclass = PSYMBOL_CLASS (psym);
504
505   switch (domain)
506     {
507     case VAR_DOMAIN:
508       switch (aclass)
509         {
510         case LOC_BLOCK:
511           return GDB_INDEX_SYMBOL_KIND_FUNCTION;
512         case LOC_TYPEDEF:
513           return GDB_INDEX_SYMBOL_KIND_TYPE;
514         case LOC_COMPUTED:
515         case LOC_CONST_BYTES:
516         case LOC_OPTIMIZED_OUT:
517         case LOC_STATIC:
518           return GDB_INDEX_SYMBOL_KIND_VARIABLE;
519         case LOC_CONST:
520           /* Note: It's currently impossible to recognize psyms as enum values
521              short of reading the type info.  For now punt.  */
522           return GDB_INDEX_SYMBOL_KIND_VARIABLE;
523         default:
524           /* There are other LOC_FOO values that one might want to classify
525              as variables, but dwarf2read.c doesn't currently use them.  */
526           return GDB_INDEX_SYMBOL_KIND_OTHER;
527         }
528     case STRUCT_DOMAIN:
529       return GDB_INDEX_SYMBOL_KIND_TYPE;
530     default:
531       return GDB_INDEX_SYMBOL_KIND_OTHER;
532     }
533 }
534
535 /* Add a list of partial symbols to SYMTAB.  */
536
537 static void
538 write_psymbols (struct mapped_symtab *symtab,
539                 std::unordered_set<partial_symbol *> &psyms_seen,
540                 struct partial_symbol **psymp,
541                 int count,
542                 offset_type cu_index,
543                 int is_static)
544 {
545   for (; count-- > 0; ++psymp)
546     {
547       struct partial_symbol *psym = *psymp;
548
549       if (SYMBOL_LANGUAGE (psym) == language_ada)
550         error (_("Ada is not currently supported by the index"));
551
552       /* Only add a given psymbol once.  */
553       if (psyms_seen.insert (psym).second)
554         {
555           gdb_index_symbol_kind kind = symbol_kind (psym);
556
557           add_index_entry (symtab, SYMBOL_SEARCH_NAME (psym),
558                            is_static, kind, cu_index);
559         }
560     }
561 }
562
563 /* A helper struct used when iterating over debug_types.  */
564 struct signatured_type_index_data
565 {
566   signatured_type_index_data (data_buf &types_list_,
567                               std::unordered_set<partial_symbol *> &psyms_seen_)
568     : types_list (types_list_), psyms_seen (psyms_seen_)
569   {}
570
571   struct objfile *objfile;
572   struct mapped_symtab *symtab;
573   data_buf &types_list;
574   std::unordered_set<partial_symbol *> &psyms_seen;
575   int cu_index;
576 };
577
578 /* A helper function that writes a single signatured_type to an
579    obstack.  */
580
581 static int
582 write_one_signatured_type (void **slot, void *d)
583 {
584   struct signatured_type_index_data *info
585     = (struct signatured_type_index_data *) d;
586   struct signatured_type *entry = (struct signatured_type *) *slot;
587   struct partial_symtab *psymtab = entry->per_cu.v.psymtab;
588
589   write_psymbols (info->symtab,
590                   info->psyms_seen,
591                   (info->objfile->global_psymbols.data ()
592                    + psymtab->globals_offset),
593                   psymtab->n_global_syms, info->cu_index,
594                   0);
595   write_psymbols (info->symtab,
596                   info->psyms_seen,
597                   (info->objfile->static_psymbols.data ()
598                    + psymtab->statics_offset),
599                   psymtab->n_static_syms, info->cu_index,
600                   1);
601
602   info->types_list.append_uint (8, BFD_ENDIAN_LITTLE,
603                                 to_underlying (entry->per_cu.sect_off));
604   info->types_list.append_uint (8, BFD_ENDIAN_LITTLE,
605                                 to_underlying (entry->type_offset_in_tu));
606   info->types_list.append_uint (8, BFD_ENDIAN_LITTLE, entry->signature);
607
608   ++info->cu_index;
609
610   return 1;
611 }
612
613 /* Recurse into all "included" dependencies and count their symbols as
614    if they appeared in this psymtab.  */
615
616 static void
617 recursively_count_psymbols (struct partial_symtab *psymtab,
618                             size_t &psyms_seen)
619 {
620   for (int i = 0; i < psymtab->number_of_dependencies; ++i)
621     if (psymtab->dependencies[i]->user != NULL)
622       recursively_count_psymbols (psymtab->dependencies[i],
623                                   psyms_seen);
624
625   psyms_seen += psymtab->n_global_syms;
626   psyms_seen += psymtab->n_static_syms;
627 }
628
629 /* Recurse into all "included" dependencies and write their symbols as
630    if they appeared in this psymtab.  */
631
632 static void
633 recursively_write_psymbols (struct objfile *objfile,
634                             struct partial_symtab *psymtab,
635                             struct mapped_symtab *symtab,
636                             std::unordered_set<partial_symbol *> &psyms_seen,
637                             offset_type cu_index)
638 {
639   int i;
640
641   for (i = 0; i < psymtab->number_of_dependencies; ++i)
642     if (psymtab->dependencies[i]->user != NULL)
643       recursively_write_psymbols (objfile, psymtab->dependencies[i],
644                                   symtab, psyms_seen, cu_index);
645
646   write_psymbols (symtab,
647                   psyms_seen,
648                   objfile->global_psymbols.data () + psymtab->globals_offset,
649                   psymtab->n_global_syms, cu_index,
650                   0);
651   write_psymbols (symtab,
652                   psyms_seen,
653                   objfile->static_psymbols.data () + psymtab->statics_offset,
654                   psymtab->n_static_syms, cu_index,
655                   1);
656 }
657
658 /* DWARF-5 .debug_names builder.  */
659 class debug_names
660 {
661 public:
662   debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile, bool is_dwarf64,
663                bfd_endian dwarf5_byte_order)
664     : m_dwarf5_byte_order (dwarf5_byte_order),
665       m_dwarf32 (dwarf5_byte_order),
666       m_dwarf64 (dwarf5_byte_order),
667       m_dwarf (is_dwarf64
668                ? static_cast<dwarf &> (m_dwarf64)
669                : static_cast<dwarf &> (m_dwarf32)),
670       m_name_table_string_offs (m_dwarf.name_table_string_offs),
671       m_name_table_entry_offs (m_dwarf.name_table_entry_offs),
672       m_debugstrlookup (dwarf2_per_objfile)
673   {}
674
675   int dwarf5_offset_size () const
676   {
677     const bool dwarf5_is_dwarf64 = &m_dwarf == &m_dwarf64;
678     return dwarf5_is_dwarf64 ? 8 : 4;
679   }
680
681   /* Is this symbol from DW_TAG_compile_unit or DW_TAG_type_unit?  */
682   enum class unit_kind { cu, tu };
683
684   /* Insert one symbol.  */
685   void insert (const partial_symbol *psym, int cu_index, bool is_static,
686                unit_kind kind)
687   {
688     const int dwarf_tag = psymbol_tag (psym);
689     if (dwarf_tag == 0)
690       return;
691     const char *const name = SYMBOL_SEARCH_NAME (psym);
692     const auto insertpair
693       = m_name_to_value_set.emplace (c_str_view (name),
694                                      std::set<symbol_value> ());
695     std::set<symbol_value> &value_set = insertpair.first->second;
696     value_set.emplace (symbol_value (dwarf_tag, cu_index, is_static, kind));
697   }
698
699   /* Build all the tables.  All symbols must be already inserted.
700      This function does not call file_write, caller has to do it
701      afterwards.  */
702   void build ()
703   {
704     /* Verify the build method has not be called twice.  */
705     gdb_assert (m_abbrev_table.empty ());
706     const size_t name_count = m_name_to_value_set.size ();
707     m_bucket_table.resize
708       (std::pow (2, std::ceil (std::log2 (name_count * 4 / 3))));
709     m_hash_table.reserve (name_count);
710     m_name_table_string_offs.reserve (name_count);
711     m_name_table_entry_offs.reserve (name_count);
712
713     /* Map each hash of symbol to its name and value.  */
714     struct hash_it_pair
715     {
716       uint32_t hash;
717       decltype (m_name_to_value_set)::const_iterator it;
718     };
719     std::vector<std::forward_list<hash_it_pair>> bucket_hash;
720     bucket_hash.resize (m_bucket_table.size ());
721     for (decltype (m_name_to_value_set)::const_iterator it
722            = m_name_to_value_set.cbegin ();
723          it != m_name_to_value_set.cend ();
724          ++it)
725       {
726         const char *const name = it->first.c_str ();
727         const uint32_t hash = dwarf5_djb_hash (name);
728         hash_it_pair hashitpair;
729         hashitpair.hash = hash;
730         hashitpair.it = it;
731         auto &slot = bucket_hash[hash % bucket_hash.size()];
732         slot.push_front (std::move (hashitpair));
733       }
734     for (size_t bucket_ix = 0; bucket_ix < bucket_hash.size (); ++bucket_ix)
735       {
736         const std::forward_list<hash_it_pair> &hashitlist
737           = bucket_hash[bucket_ix];
738         if (hashitlist.empty ())
739           continue;
740         uint32_t &bucket_slot = m_bucket_table[bucket_ix];
741         /* The hashes array is indexed starting at 1.  */
742         store_unsigned_integer (reinterpret_cast<gdb_byte *> (&bucket_slot),
743                                 sizeof (bucket_slot), m_dwarf5_byte_order,
744                                 m_hash_table.size () + 1);
745         for (const hash_it_pair &hashitpair : hashitlist)
746           {
747             m_hash_table.push_back (0);
748             store_unsigned_integer (reinterpret_cast<gdb_byte *>
749                                                         (&m_hash_table.back ()),
750                                     sizeof (m_hash_table.back ()),
751                                     m_dwarf5_byte_order, hashitpair.hash);
752             const c_str_view &name = hashitpair.it->first;
753             const std::set<symbol_value> &value_set = hashitpair.it->second;
754             m_name_table_string_offs.push_back_reorder
755               (m_debugstrlookup.lookup (name.c_str ()));
756             m_name_table_entry_offs.push_back_reorder (m_entry_pool.size ());
757             gdb_assert (!value_set.empty ());
758             for (const symbol_value &value : value_set)
759               {
760                 int &idx = m_indexkey_to_idx[index_key (value.dwarf_tag,
761                                                         value.is_static,
762                                                         value.kind)];
763                 if (idx == 0)
764                   {
765                     idx = m_idx_next++;
766                     m_abbrev_table.append_unsigned_leb128 (idx);
767                     m_abbrev_table.append_unsigned_leb128 (value.dwarf_tag);
768                     m_abbrev_table.append_unsigned_leb128
769                               (value.kind == unit_kind::cu ? DW_IDX_compile_unit
770                                                            : DW_IDX_type_unit);
771                     m_abbrev_table.append_unsigned_leb128 (DW_FORM_udata);
772                     m_abbrev_table.append_unsigned_leb128 (value.is_static
773                                                            ? DW_IDX_GNU_internal
774                                                            : DW_IDX_GNU_external);
775                     m_abbrev_table.append_unsigned_leb128 (DW_FORM_flag_present);
776
777                     /* Terminate attributes list.  */
778                     m_abbrev_table.append_unsigned_leb128 (0);
779                     m_abbrev_table.append_unsigned_leb128 (0);
780                   }
781
782                 m_entry_pool.append_unsigned_leb128 (idx);
783                 m_entry_pool.append_unsigned_leb128 (value.cu_index);
784               }
785
786             /* Terminate the list of CUs.  */
787             m_entry_pool.append_unsigned_leb128 (0);
788           }
789       }
790     gdb_assert (m_hash_table.size () == name_count);
791
792     /* Terminate tags list.  */
793     m_abbrev_table.append_unsigned_leb128 (0);
794   }
795
796   /* Return .debug_names bucket count.  This must be called only after
797      calling the build method.  */
798   uint32_t bucket_count () const
799   {
800     /* Verify the build method has been already called.  */
801     gdb_assert (!m_abbrev_table.empty ());
802     const uint32_t retval = m_bucket_table.size ();
803
804     /* Check for overflow.  */
805     gdb_assert (retval == m_bucket_table.size ());
806     return retval;
807   }
808
809   /* Return .debug_names names count.  This must be called only after
810      calling the build method.  */
811   uint32_t name_count () const
812   {
813     /* Verify the build method has been already called.  */
814     gdb_assert (!m_abbrev_table.empty ());
815     const uint32_t retval = m_hash_table.size ();
816
817     /* Check for overflow.  */
818     gdb_assert (retval == m_hash_table.size ());
819     return retval;
820   }
821
822   /* Return number of bytes of .debug_names abbreviation table.  This
823      must be called only after calling the build method.  */
824   uint32_t abbrev_table_bytes () const
825   {
826     gdb_assert (!m_abbrev_table.empty ());
827     return m_abbrev_table.size ();
828   }
829
830   /* Recurse into all "included" dependencies and store their symbols
831      as if they appeared in this psymtab.  */
832   void recursively_write_psymbols
833     (struct objfile *objfile,
834      struct partial_symtab *psymtab,
835      std::unordered_set<partial_symbol *> &psyms_seen,
836      int cu_index)
837   {
838     for (int i = 0; i < psymtab->number_of_dependencies; ++i)
839       if (psymtab->dependencies[i]->user != NULL)
840         recursively_write_psymbols (objfile, psymtab->dependencies[i],
841                                     psyms_seen, cu_index);
842
843     write_psymbols (psyms_seen,
844                     objfile->global_psymbols.data () + psymtab->globals_offset,
845                     psymtab->n_global_syms, cu_index, false, unit_kind::cu);
846     write_psymbols (psyms_seen,
847                     objfile->static_psymbols.data () + psymtab->statics_offset,
848                     psymtab->n_static_syms, cu_index, true, unit_kind::cu);
849   }
850
851   /* Return number of bytes the .debug_names section will have.  This
852      must be called only after calling the build method.  */
853   size_t bytes () const
854   {
855     /* Verify the build method has been already called.  */
856     gdb_assert (!m_abbrev_table.empty ());
857     size_t expected_bytes = 0;
858     expected_bytes += m_bucket_table.size () * sizeof (m_bucket_table[0]);
859     expected_bytes += m_hash_table.size () * sizeof (m_hash_table[0]);
860     expected_bytes += m_name_table_string_offs.bytes ();
861     expected_bytes += m_name_table_entry_offs.bytes ();
862     expected_bytes += m_abbrev_table.size ();
863     expected_bytes += m_entry_pool.size ();
864     return expected_bytes;
865   }
866
867   /* Write .debug_names to FILE_NAMES and .debug_str addition to
868      FILE_STR.  This must be called only after calling the build
869      method.  */
870   void file_write (FILE *file_names, FILE *file_str) const
871   {
872     /* Verify the build method has been already called.  */
873     gdb_assert (!m_abbrev_table.empty ());
874     ::file_write (file_names, m_bucket_table);
875     ::file_write (file_names, m_hash_table);
876     m_name_table_string_offs.file_write (file_names);
877     m_name_table_entry_offs.file_write (file_names);
878     m_abbrev_table.file_write (file_names);
879     m_entry_pool.file_write (file_names);
880     m_debugstrlookup.file_write (file_str);
881   }
882
883   /* A helper user data for write_one_signatured_type.  */
884   class write_one_signatured_type_data
885   {
886   public:
887     write_one_signatured_type_data (debug_names &nametable_,
888                                     signatured_type_index_data &&info_)
889     : nametable (nametable_), info (std::move (info_))
890     {}
891     debug_names &nametable;
892     struct signatured_type_index_data info;
893   };
894
895   /* A helper function to pass write_one_signatured_type to
896      htab_traverse_noresize.  */
897   static int
898   write_one_signatured_type (void **slot, void *d)
899   {
900     write_one_signatured_type_data *data = (write_one_signatured_type_data *) d;
901     struct signatured_type_index_data *info = &data->info;
902     struct signatured_type *entry = (struct signatured_type *) *slot;
903
904     data->nametable.write_one_signatured_type (entry, info);
905
906     return 1;
907   }
908
909 private:
910
911   /* Storage for symbol names mapping them to their .debug_str section
912      offsets.  */
913   class debug_str_lookup
914   {
915   public:
916
917     /* Object costructor to be called for current DWARF2_PER_OBJFILE.
918        All .debug_str section strings are automatically stored.  */
919     debug_str_lookup (struct dwarf2_per_objfile *dwarf2_per_objfile)
920       : m_abfd (dwarf2_per_objfile->objfile->obfd),
921         m_dwarf2_per_objfile (dwarf2_per_objfile)
922     {
923       dwarf2_read_section (dwarf2_per_objfile->objfile,
924                            &dwarf2_per_objfile->str);
925       if (dwarf2_per_objfile->str.buffer == NULL)
926         return;
927       for (const gdb_byte *data = dwarf2_per_objfile->str.buffer;
928            data < (dwarf2_per_objfile->str.buffer
929                    + dwarf2_per_objfile->str.size);)
930         {
931           const char *const s = reinterpret_cast<const char *> (data);
932           const auto insertpair
933             = m_str_table.emplace (c_str_view (s),
934                                    data - dwarf2_per_objfile->str.buffer);
935           if (!insertpair.second)
936             complaint (&symfile_complaints,
937                        _("Duplicate string \"%s\" in "
938                          ".debug_str section [in module %s]"),
939                        s, bfd_get_filename (m_abfd));
940           data += strlen (s) + 1;
941         }
942     }
943
944     /* Return offset of symbol name S in the .debug_str section.  Add
945        such symbol to the section's end if it does not exist there
946        yet.  */
947     size_t lookup (const char *s)
948     {
949       const auto it = m_str_table.find (c_str_view (s));
950       if (it != m_str_table.end ())
951         return it->second;
952       const size_t offset = (m_dwarf2_per_objfile->str.size
953                              + m_str_add_buf.size ());
954       m_str_table.emplace (c_str_view (s), offset);
955       m_str_add_buf.append_cstr0 (s);
956       return offset;
957     }
958
959     /* Append the end of the .debug_str section to FILE.  */
960     void file_write (FILE *file) const
961     {
962       m_str_add_buf.file_write (file);
963     }
964
965   private:
966     std::unordered_map<c_str_view, size_t, c_str_view_hasher> m_str_table;
967     bfd *const m_abfd;
968     struct dwarf2_per_objfile *m_dwarf2_per_objfile;
969
970     /* Data to add at the end of .debug_str for new needed symbol names.  */
971     data_buf m_str_add_buf;
972   };
973
974   /* Container to map used DWARF tags to their .debug_names abbreviation
975      tags.  */
976   class index_key
977   {
978   public:
979     index_key (int dwarf_tag_, bool is_static_, unit_kind kind_)
980       : dwarf_tag (dwarf_tag_), is_static (is_static_), kind (kind_)
981     {
982     }
983
984     bool
985     operator== (const index_key &other) const
986     {
987       return (dwarf_tag == other.dwarf_tag && is_static == other.is_static
988               && kind == other.kind);
989     }
990
991     const int dwarf_tag;
992     const bool is_static;
993     const unit_kind kind;
994   };
995
996   /* Provide std::unordered_map::hasher for index_key.  */
997   class index_key_hasher
998   {
999   public:
1000     size_t
1001     operator () (const index_key &key) const
1002     {
1003       return (std::hash<int>() (key.dwarf_tag) << 1) | key.is_static;
1004     }
1005   };
1006
1007   /* Parameters of one symbol entry.  */
1008   class symbol_value
1009   {
1010   public:
1011     const int dwarf_tag, cu_index;
1012     const bool is_static;
1013     const unit_kind kind;
1014
1015     symbol_value (int dwarf_tag_, int cu_index_, bool is_static_,
1016                   unit_kind kind_)
1017       : dwarf_tag (dwarf_tag_), cu_index (cu_index_), is_static (is_static_),
1018         kind (kind_)
1019     {}
1020
1021     bool
1022     operator< (const symbol_value &other) const
1023     {
1024 #define X(n) \
1025   do \
1026     { \
1027       if (n < other.n) \
1028         return true; \
1029       if (n > other.n) \
1030         return false; \
1031     } \
1032   while (0)
1033       X (dwarf_tag);
1034       X (is_static);
1035       X (kind);
1036       X (cu_index);
1037 #undef X
1038       return false;
1039     }
1040   };
1041
1042   /* Abstract base class to unify DWARF-32 and DWARF-64 name table
1043      output.  */
1044   class offset_vec
1045   {
1046   protected:
1047     const bfd_endian dwarf5_byte_order;
1048   public:
1049     explicit offset_vec (bfd_endian dwarf5_byte_order_)
1050       : dwarf5_byte_order (dwarf5_byte_order_)
1051     {}
1052
1053     /* Call std::vector::reserve for NELEM elements.  */
1054     virtual void reserve (size_t nelem) = 0;
1055
1056     /* Call std::vector::push_back with store_unsigned_integer byte
1057        reordering for ELEM.  */
1058     virtual void push_back_reorder (size_t elem) = 0;
1059
1060     /* Return expected output size in bytes.  */
1061     virtual size_t bytes () const = 0;
1062
1063     /* Write name table to FILE.  */
1064     virtual void file_write (FILE *file) const = 0;
1065   };
1066
1067   /* Template to unify DWARF-32 and DWARF-64 output.  */
1068   template<typename OffsetSize>
1069   class offset_vec_tmpl : public offset_vec
1070   {
1071   public:
1072     explicit offset_vec_tmpl (bfd_endian dwarf5_byte_order_)
1073       : offset_vec (dwarf5_byte_order_)
1074     {}
1075
1076     /* Implement offset_vec::reserve.  */
1077     void reserve (size_t nelem) override
1078     {
1079       m_vec.reserve (nelem);
1080     }
1081
1082     /* Implement offset_vec::push_back_reorder.  */
1083     void push_back_reorder (size_t elem) override
1084     {
1085       m_vec.push_back (elem);
1086       /* Check for overflow.  */
1087       gdb_assert (m_vec.back () == elem);
1088       store_unsigned_integer (reinterpret_cast<gdb_byte *> (&m_vec.back ()),
1089                               sizeof (m_vec.back ()), dwarf5_byte_order, elem);
1090     }
1091
1092     /* Implement offset_vec::bytes.  */
1093     size_t bytes () const override
1094     {
1095       return m_vec.size () * sizeof (m_vec[0]);
1096     }
1097
1098     /* Implement offset_vec::file_write.  */
1099     void file_write (FILE *file) const override
1100     {
1101       ::file_write (file, m_vec);
1102     }
1103
1104   private:
1105     std::vector<OffsetSize> m_vec;
1106   };
1107
1108   /* Base class to unify DWARF-32 and DWARF-64 .debug_names output
1109      respecting name table width.  */
1110   class dwarf
1111   {
1112   public:
1113     offset_vec &name_table_string_offs, &name_table_entry_offs;
1114
1115     dwarf (offset_vec &name_table_string_offs_,
1116            offset_vec &name_table_entry_offs_)
1117       : name_table_string_offs (name_table_string_offs_),
1118         name_table_entry_offs (name_table_entry_offs_)
1119     {
1120     }
1121   };
1122
1123   /* Template to unify DWARF-32 and DWARF-64 .debug_names output
1124      respecting name table width.  */
1125   template<typename OffsetSize>
1126   class dwarf_tmpl : public dwarf
1127   {
1128   public:
1129     explicit dwarf_tmpl (bfd_endian dwarf5_byte_order_)
1130       : dwarf (m_name_table_string_offs, m_name_table_entry_offs),
1131         m_name_table_string_offs (dwarf5_byte_order_),
1132         m_name_table_entry_offs (dwarf5_byte_order_)
1133     {}
1134
1135   private:
1136     offset_vec_tmpl<OffsetSize> m_name_table_string_offs;
1137     offset_vec_tmpl<OffsetSize> m_name_table_entry_offs;
1138   };
1139
1140   /* Try to reconstruct original DWARF tag for given partial_symbol.
1141      This function is not DWARF-5 compliant but it is sufficient for
1142      GDB as a DWARF-5 index consumer.  */
1143   static int psymbol_tag (const struct partial_symbol *psym)
1144   {
1145     domain_enum domain = PSYMBOL_DOMAIN (psym);
1146     enum address_class aclass = PSYMBOL_CLASS (psym);
1147
1148     switch (domain)
1149       {
1150       case VAR_DOMAIN:
1151         switch (aclass)
1152           {
1153           case LOC_BLOCK:
1154             return DW_TAG_subprogram;
1155           case LOC_TYPEDEF:
1156             return DW_TAG_typedef;
1157           case LOC_COMPUTED:
1158           case LOC_CONST_BYTES:
1159           case LOC_OPTIMIZED_OUT:
1160           case LOC_STATIC:
1161             return DW_TAG_variable;
1162           case LOC_CONST:
1163             /* Note: It's currently impossible to recognize psyms as enum values
1164                short of reading the type info.  For now punt.  */
1165             return DW_TAG_variable;
1166           default:
1167             /* There are other LOC_FOO values that one might want to classify
1168                as variables, but dwarf2read.c doesn't currently use them.  */
1169             return DW_TAG_variable;
1170           }
1171       case STRUCT_DOMAIN:
1172         return DW_TAG_structure_type;
1173       default:
1174         return 0;
1175       }
1176   }
1177
1178   /* Call insert for all partial symbols and mark them in PSYMS_SEEN.  */
1179   void write_psymbols (std::unordered_set<partial_symbol *> &psyms_seen,
1180                        struct partial_symbol **psymp, int count, int cu_index,
1181                        bool is_static, unit_kind kind)
1182   {
1183     for (; count-- > 0; ++psymp)
1184       {
1185         struct partial_symbol *psym = *psymp;
1186
1187         if (SYMBOL_LANGUAGE (psym) == language_ada)
1188           error (_("Ada is not currently supported by the index"));
1189
1190         /* Only add a given psymbol once.  */
1191         if (psyms_seen.insert (psym).second)
1192           insert (psym, cu_index, is_static, kind);
1193       }
1194   }
1195
1196   /* A helper function that writes a single signatured_type
1197      to a debug_names.  */
1198   void
1199   write_one_signatured_type (struct signatured_type *entry,
1200                              struct signatured_type_index_data *info)
1201   {
1202     struct partial_symtab *psymtab = entry->per_cu.v.psymtab;
1203
1204     write_psymbols (info->psyms_seen,
1205                     (info->objfile->global_psymbols.data ()
1206                      + psymtab->globals_offset),
1207                     psymtab->n_global_syms, info->cu_index, false,
1208                     unit_kind::tu);
1209     write_psymbols (info->psyms_seen,
1210                     (info->objfile->static_psymbols.data ()
1211                      + psymtab->statics_offset),
1212                     psymtab->n_static_syms, info->cu_index, true,
1213                     unit_kind::tu);
1214
1215     info->types_list.append_uint (dwarf5_offset_size (), m_dwarf5_byte_order,
1216                                   to_underlying (entry->per_cu.sect_off));
1217
1218     ++info->cu_index;
1219   }
1220
1221   /* Store value of each symbol.  */
1222   std::unordered_map<c_str_view, std::set<symbol_value>, c_str_view_hasher>
1223     m_name_to_value_set;
1224
1225   /* Tables of DWARF-5 .debug_names.  They are in object file byte
1226      order.  */
1227   std::vector<uint32_t> m_bucket_table;
1228   std::vector<uint32_t> m_hash_table;
1229
1230   const bfd_endian m_dwarf5_byte_order;
1231   dwarf_tmpl<uint32_t> m_dwarf32;
1232   dwarf_tmpl<uint64_t> m_dwarf64;
1233   dwarf &m_dwarf;
1234   offset_vec &m_name_table_string_offs, &m_name_table_entry_offs;
1235   debug_str_lookup m_debugstrlookup;
1236
1237   /* Map each used .debug_names abbreviation tag parameter to its
1238      index value.  */
1239   std::unordered_map<index_key, int, index_key_hasher> m_indexkey_to_idx;
1240
1241   /* Next unused .debug_names abbreviation tag for
1242      m_indexkey_to_idx.  */
1243   int m_idx_next = 1;
1244
1245   /* .debug_names abbreviation table.  */
1246   data_buf m_abbrev_table;
1247
1248   /* .debug_names entry pool.  */
1249   data_buf m_entry_pool;
1250 };
1251
1252 /* Return iff any of the needed offsets does not fit into 32-bit
1253    .debug_names section.  */
1254
1255 static bool
1256 check_dwarf64_offsets (struct dwarf2_per_objfile *dwarf2_per_objfile)
1257 {
1258   for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
1259     {
1260       if (to_underlying (per_cu->sect_off) >= (static_cast<uint64_t> (1) << 32))
1261         return true;
1262     }
1263   for (const signatured_type *sigtype : dwarf2_per_objfile->all_type_units)
1264     {
1265       const dwarf2_per_cu_data &per_cu = sigtype->per_cu;
1266
1267       if (to_underlying (per_cu.sect_off) >= (static_cast<uint64_t> (1) << 32))
1268         return true;
1269     }
1270   return false;
1271 }
1272
1273 /* The psyms_seen set is potentially going to be largish (~40k
1274    elements when indexing a -g3 build of GDB itself).  Estimate the
1275    number of elements in order to avoid too many rehashes, which
1276    require rebuilding buckets and thus many trips to
1277    malloc/free.  */
1278
1279 static size_t
1280 psyms_seen_size (struct dwarf2_per_objfile *dwarf2_per_objfile)
1281 {
1282   size_t psyms_count = 0;
1283   for (dwarf2_per_cu_data *per_cu : dwarf2_per_objfile->all_comp_units)
1284     {
1285       struct partial_symtab *psymtab = per_cu->v.psymtab;
1286
1287       if (psymtab != NULL && psymtab->user == NULL)
1288         recursively_count_psymbols (psymtab, psyms_count);
1289     }
1290   /* Generating an index for gdb itself shows a ratio of
1291      TOTAL_SEEN_SYMS/UNIQUE_SYMS or ~5.  4 seems like a good bet.  */
1292   return psyms_count / 4;
1293 }
1294
1295 /* Write new .gdb_index section for OBJFILE into OUT_FILE.
1296    Return how many bytes were expected to be written into OUT_FILE.  */
1297
1298 static size_t
1299 write_gdbindex (struct dwarf2_per_objfile *dwarf2_per_objfile, FILE *out_file)
1300 {
1301   struct objfile *objfile = dwarf2_per_objfile->objfile;
1302   mapped_symtab symtab;
1303   data_buf cu_list;
1304
1305   /* While we're scanning CU's create a table that maps a psymtab pointer
1306      (which is what addrmap records) to its index (which is what is recorded
1307      in the index file).  This will later be needed to write the address
1308      table.  */
1309   psym_index_map cu_index_htab;
1310   cu_index_htab.reserve (dwarf2_per_objfile->all_comp_units.size ());
1311
1312   /* The CU list is already sorted, so we don't need to do additional
1313      work here.  Also, the debug_types entries do not appear in
1314      all_comp_units, but only in their own hash table.  */
1315
1316   std::unordered_set<partial_symbol *> psyms_seen
1317     (psyms_seen_size (dwarf2_per_objfile));
1318   for (int i = 0; i < dwarf2_per_objfile->all_comp_units.size (); ++i)
1319     {
1320       struct dwarf2_per_cu_data *per_cu
1321         = dwarf2_per_objfile->all_comp_units[i];
1322       struct partial_symtab *psymtab = per_cu->v.psymtab;
1323
1324       /* CU of a shared file from 'dwz -m' may be unused by this main file.
1325          It may be referenced from a local scope but in such case it does not
1326          need to be present in .gdb_index.  */
1327       if (psymtab == NULL)
1328         continue;
1329
1330       if (psymtab->user == NULL)
1331         recursively_write_psymbols (objfile, psymtab, &symtab,
1332                                     psyms_seen, i);
1333
1334       const auto insertpair = cu_index_htab.emplace (psymtab, i);
1335       gdb_assert (insertpair.second);
1336
1337       cu_list.append_uint (8, BFD_ENDIAN_LITTLE,
1338                            to_underlying (per_cu->sect_off));
1339       cu_list.append_uint (8, BFD_ENDIAN_LITTLE, per_cu->length);
1340     }
1341
1342   /* Dump the address map.  */
1343   data_buf addr_vec;
1344   write_address_map (objfile, addr_vec, cu_index_htab);
1345
1346   /* Write out the .debug_type entries, if any.  */
1347   data_buf types_cu_list;
1348   if (dwarf2_per_objfile->signatured_types)
1349     {
1350       signatured_type_index_data sig_data (types_cu_list,
1351                                            psyms_seen);
1352
1353       sig_data.objfile = objfile;
1354       sig_data.symtab = &symtab;
1355       sig_data.cu_index = dwarf2_per_objfile->all_comp_units.size ();
1356       htab_traverse_noresize (dwarf2_per_objfile->signatured_types,
1357                               write_one_signatured_type, &sig_data);
1358     }
1359
1360   /* Now that we've processed all symbols we can shrink their cu_indices
1361      lists.  */
1362   uniquify_cu_indices (&symtab);
1363
1364   data_buf symtab_vec, constant_pool;
1365   write_hash_table (&symtab, symtab_vec, constant_pool);
1366
1367   data_buf contents;
1368   const offset_type size_of_contents = 6 * sizeof (offset_type);
1369   offset_type total_len = size_of_contents;
1370
1371   /* The version number.  */
1372   contents.append_data (MAYBE_SWAP (8));
1373
1374   /* The offset of the CU list from the start of the file.  */
1375   contents.append_data (MAYBE_SWAP (total_len));
1376   total_len += cu_list.size ();
1377
1378   /* The offset of the types CU list from the start of the file.  */
1379   contents.append_data (MAYBE_SWAP (total_len));
1380   total_len += types_cu_list.size ();
1381
1382   /* The offset of the address table from the start of the file.  */
1383   contents.append_data (MAYBE_SWAP (total_len));
1384   total_len += addr_vec.size ();
1385
1386   /* The offset of the symbol table from the start of the file.  */
1387   contents.append_data (MAYBE_SWAP (total_len));
1388   total_len += symtab_vec.size ();
1389
1390   /* The offset of the constant pool from the start of the file.  */
1391   contents.append_data (MAYBE_SWAP (total_len));
1392   total_len += constant_pool.size ();
1393
1394   gdb_assert (contents.size () == size_of_contents);
1395
1396   contents.file_write (out_file);
1397   cu_list.file_write (out_file);
1398   types_cu_list.file_write (out_file);
1399   addr_vec.file_write (out_file);
1400   symtab_vec.file_write (out_file);
1401   constant_pool.file_write (out_file);
1402
1403   return total_len;
1404 }
1405
1406 /* DWARF-5 augmentation string for GDB's DW_IDX_GNU_* extension.  */
1407 static const gdb_byte dwarf5_gdb_augmentation[] = { 'G', 'D', 'B', 0 };
1408
1409 /* Write a new .debug_names section for OBJFILE into OUT_FILE, write
1410    needed addition to .debug_str section to OUT_FILE_STR.  Return how
1411    many bytes were expected to be written into OUT_FILE.  */
1412
1413 static size_t
1414 write_debug_names (struct dwarf2_per_objfile *dwarf2_per_objfile,
1415                    FILE *out_file, FILE *out_file_str)
1416 {
1417   const bool dwarf5_is_dwarf64 = check_dwarf64_offsets (dwarf2_per_objfile);
1418   struct objfile *objfile = dwarf2_per_objfile->objfile;
1419   const enum bfd_endian dwarf5_byte_order
1420     = gdbarch_byte_order (get_objfile_arch (objfile));
1421
1422   /* The CU list is already sorted, so we don't need to do additional
1423      work here.  Also, the debug_types entries do not appear in
1424      all_comp_units, but only in their own hash table.  */
1425   data_buf cu_list;
1426   debug_names nametable (dwarf2_per_objfile, dwarf5_is_dwarf64,
1427                          dwarf5_byte_order);
1428   std::unordered_set<partial_symbol *>
1429     psyms_seen (psyms_seen_size (dwarf2_per_objfile));
1430   for (int i = 0; i < dwarf2_per_objfile->all_comp_units.size (); ++i)
1431     {
1432       const dwarf2_per_cu_data *per_cu = dwarf2_per_objfile->all_comp_units[i];
1433       partial_symtab *psymtab = per_cu->v.psymtab;
1434
1435       /* CU of a shared file from 'dwz -m' may be unused by this main
1436          file.  It may be referenced from a local scope but in such
1437          case it does not need to be present in .debug_names.  */
1438       if (psymtab == NULL)
1439         continue;
1440
1441       if (psymtab->user == NULL)
1442         nametable.recursively_write_psymbols (objfile, psymtab, psyms_seen, i);
1443
1444       cu_list.append_uint (nametable.dwarf5_offset_size (), dwarf5_byte_order,
1445                            to_underlying (per_cu->sect_off));
1446     }
1447
1448   /* Write out the .debug_type entries, if any.  */
1449   data_buf types_cu_list;
1450   if (dwarf2_per_objfile->signatured_types)
1451     {
1452       debug_names::write_one_signatured_type_data sig_data (nametable,
1453                         signatured_type_index_data (types_cu_list, psyms_seen));
1454
1455       sig_data.info.objfile = objfile;
1456       /* It is used only for gdb_index.  */
1457       sig_data.info.symtab = nullptr;
1458       sig_data.info.cu_index = 0;
1459       htab_traverse_noresize (dwarf2_per_objfile->signatured_types,
1460                               debug_names::write_one_signatured_type,
1461                               &sig_data);
1462     }
1463
1464   nametable.build ();
1465
1466   /* No addr_vec - DWARF-5 uses .debug_aranges generated by GCC.  */
1467
1468   const offset_type bytes_of_header
1469     = ((dwarf5_is_dwarf64 ? 12 : 4)
1470        + 2 + 2 + 7 * 4
1471        + sizeof (dwarf5_gdb_augmentation));
1472   size_t expected_bytes = 0;
1473   expected_bytes += bytes_of_header;
1474   expected_bytes += cu_list.size ();
1475   expected_bytes += types_cu_list.size ();
1476   expected_bytes += nametable.bytes ();
1477   data_buf header;
1478
1479   if (!dwarf5_is_dwarf64)
1480     {
1481       const uint64_t size64 = expected_bytes - 4;
1482       gdb_assert (size64 < 0xfffffff0);
1483       header.append_uint (4, dwarf5_byte_order, size64);
1484     }
1485   else
1486     {
1487       header.append_uint (4, dwarf5_byte_order, 0xffffffff);
1488       header.append_uint (8, dwarf5_byte_order, expected_bytes - 12);
1489     }
1490
1491   /* The version number.  */
1492   header.append_uint (2, dwarf5_byte_order, 5);
1493
1494   /* Padding.  */
1495   header.append_uint (2, dwarf5_byte_order, 0);
1496
1497   /* comp_unit_count - The number of CUs in the CU list.  */
1498   header.append_uint (4, dwarf5_byte_order,
1499                       dwarf2_per_objfile->all_comp_units.size ());
1500
1501   /* local_type_unit_count - The number of TUs in the local TU
1502      list.  */
1503   header.append_uint (4, dwarf5_byte_order,
1504                       dwarf2_per_objfile->all_type_units.size ());
1505
1506   /* foreign_type_unit_count - The number of TUs in the foreign TU
1507      list.  */
1508   header.append_uint (4, dwarf5_byte_order, 0);
1509
1510   /* bucket_count - The number of hash buckets in the hash lookup
1511      table.  */
1512   header.append_uint (4, dwarf5_byte_order, nametable.bucket_count ());
1513
1514   /* name_count - The number of unique names in the index.  */
1515   header.append_uint (4, dwarf5_byte_order, nametable.name_count ());
1516
1517   /* abbrev_table_size - The size in bytes of the abbreviations
1518      table.  */
1519   header.append_uint (4, dwarf5_byte_order, nametable.abbrev_table_bytes ());
1520
1521   /* augmentation_string_size - The size in bytes of the augmentation
1522      string.  This value is rounded up to a multiple of 4.  */
1523   static_assert (sizeof (dwarf5_gdb_augmentation) % 4 == 0, "");
1524   header.append_uint (4, dwarf5_byte_order, sizeof (dwarf5_gdb_augmentation));
1525   header.append_data (dwarf5_gdb_augmentation);
1526
1527   gdb_assert (header.size () == bytes_of_header);
1528
1529   header.file_write (out_file);
1530   cu_list.file_write (out_file);
1531   types_cu_list.file_write (out_file);
1532   nametable.file_write (out_file, out_file_str);
1533
1534   return expected_bytes;
1535 }
1536
1537 /* Assert that FILE's size is EXPECTED_SIZE.  Assumes file's seek
1538    position is at the end of the file.  */
1539
1540 static void
1541 assert_file_size (FILE *file, const char *filename, size_t expected_size)
1542 {
1543   const auto file_size = ftell (file);
1544   if (file_size == -1)
1545     error (_("Can't get `%s' size"), filename);
1546   gdb_assert (file_size == expected_size);
1547 }
1548
1549 /* Create an index file for OBJFILE in the directory DIR.  */
1550
1551 static void
1552 write_psymtabs_to_index (struct dwarf2_per_objfile *dwarf2_per_objfile,
1553                          const char *dir,
1554                          dw_index_kind index_kind)
1555 {
1556   struct objfile *objfile = dwarf2_per_objfile->objfile;
1557
1558   if (dwarf2_per_objfile->using_index)
1559     error (_("Cannot use an index to create the index"));
1560
1561   if (VEC_length (dwarf2_section_info_def, dwarf2_per_objfile->types) > 1)
1562     error (_("Cannot make an index when the file has multiple .debug_types sections"));
1563
1564   if (!objfile->psymtabs || !objfile->psymtabs_addrmap)
1565     return;
1566
1567   struct stat st;
1568   if (stat (objfile_name (objfile), &st) < 0)
1569     perror_with_name (objfile_name (objfile));
1570
1571   std::string filename (std::string (dir) + SLASH_STRING
1572                         + lbasename (objfile_name (objfile))
1573                         + (index_kind == dw_index_kind::DEBUG_NAMES
1574                            ? INDEX5_SUFFIX : INDEX4_SUFFIX));
1575
1576   FILE *out_file = gdb_fopen_cloexec (filename.c_str (), "wb").release ();
1577   if (!out_file)
1578     error (_("Can't open `%s' for writing"), filename.c_str ());
1579
1580   /* Order matters here; we want FILE to be closed before FILENAME is
1581      unlinked, because on MS-Windows one cannot delete a file that is
1582      still open.  (Don't call anything here that might throw until
1583      file_closer is created.)  */
1584   gdb::unlinker unlink_file (filename.c_str ());
1585   gdb_file_up close_out_file (out_file);
1586
1587   if (index_kind == dw_index_kind::DEBUG_NAMES)
1588     {
1589       std::string filename_str (std::string (dir) + SLASH_STRING
1590                                 + lbasename (objfile_name (objfile))
1591                                 + DEBUG_STR_SUFFIX);
1592       FILE *out_file_str
1593         = gdb_fopen_cloexec (filename_str.c_str (), "wb").release ();
1594       if (!out_file_str)
1595         error (_("Can't open `%s' for writing"), filename_str.c_str ());
1596       gdb::unlinker unlink_file_str (filename_str.c_str ());
1597       gdb_file_up close_out_file_str (out_file_str);
1598
1599       const size_t total_len
1600         = write_debug_names (dwarf2_per_objfile, out_file, out_file_str);
1601       assert_file_size (out_file, filename.c_str (), total_len);
1602
1603       /* We want to keep the file .debug_str file too.  */
1604       unlink_file_str.keep ();
1605     }
1606   else
1607     {
1608       const size_t total_len
1609         = write_gdbindex (dwarf2_per_objfile, out_file);
1610       assert_file_size (out_file, filename.c_str (), total_len);
1611     }
1612
1613   /* We want to keep the file.  */
1614   unlink_file.keep ();
1615 }
1616
1617 /* Implementation of the `save gdb-index' command.
1618
1619    Note that the .gdb_index file format used by this command is
1620    documented in the GDB manual.  Any changes here must be documented
1621    there.  */
1622
1623 static void
1624 save_gdb_index_command (const char *arg, int from_tty)
1625 {
1626   struct objfile *objfile;
1627   const char dwarf5space[] = "-dwarf-5 ";
1628   dw_index_kind index_kind = dw_index_kind::GDB_INDEX;
1629
1630   if (!arg)
1631     arg = "";
1632
1633   arg = skip_spaces (arg);
1634   if (strncmp (arg, dwarf5space, strlen (dwarf5space)) == 0)
1635     {
1636       index_kind = dw_index_kind::DEBUG_NAMES;
1637       arg += strlen (dwarf5space);
1638       arg = skip_spaces (arg);
1639     }
1640
1641   if (!*arg)
1642     error (_("usage: save gdb-index [-dwarf-5] DIRECTORY"));
1643
1644   ALL_OBJFILES (objfile)
1645   {
1646     struct stat st;
1647
1648     /* If the objfile does not correspond to an actual file, skip it.  */
1649     if (stat (objfile_name (objfile), &st) < 0)
1650       continue;
1651
1652     struct dwarf2_per_objfile *dwarf2_per_objfile
1653       = get_dwarf2_per_objfile (objfile);
1654
1655     if (dwarf2_per_objfile != NULL)
1656       {
1657         TRY
1658           {
1659             write_psymtabs_to_index (dwarf2_per_objfile, arg, index_kind);
1660           }
1661         CATCH (except, RETURN_MASK_ERROR)
1662           {
1663             exception_fprintf (gdb_stderr, except,
1664                                _("Error while writing index for `%s': "),
1665                                objfile_name (objfile));
1666           }
1667         END_CATCH
1668       }
1669
1670   }
1671 }
1672
1673 void
1674 _initialize_dwarf_index_write ()
1675 {
1676   cmd_list_element *c = add_cmd ("gdb-index", class_files,
1677                                  save_gdb_index_command, _("\
1678 Save a gdb-index file.\n\
1679 Usage: save gdb-index [-dwarf-5] DIRECTORY\n\
1680 \n\
1681 No options create one file with .gdb-index extension for pre-DWARF-5\n\
1682 compatible .gdb_index section.  With -dwarf-5 creates two files with\n\
1683 extension .debug_names and .debug_str for DWARF-5 .debug_names section."),
1684                &save_cmdlist);
1685   set_cmd_completer (c, filename_completer);
1686 }