+2014-09-27 Alan Modra <amodra@gmail.com>
+
+ * dwarf2dbg.c (all_segs_hash): Delete.
+ (get_line_subseg): Delete last_seg, last_subseg, last_line_subseg.
+ Retrieve line_seg for section via seg_info.
+ * subsegs.h (segment_info_typet): Add dwarf2_line_seg.
+
2014-09-23 H.J. Lu <hongjiu.lu@intel.com>
PR gas/17421
/* Collects data for all line table entries during assembly. */
static struct line_seg *all_segs;
-/* Hash used to quickly lookup a segment by name, avoiding the need to search
- through the all_segs list. */
-static struct hash_control *all_segs_hash;
static struct line_seg **last_seg_ptr;
struct file_entry {
static struct line_subseg *
get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
{
- static segT last_seg;
- static subsegT last_subseg;
- static struct line_subseg *last_line_subseg;
-
- struct line_seg *s;
+ struct line_seg *s = seg_info (seg)->dwarf2_line_seg;
struct line_subseg **pss, *lss;
- if (seg == last_seg && subseg == last_subseg)
- return last_line_subseg;
-
- s = (struct line_seg *) hash_find (all_segs_hash, seg->name);
if (s == NULL)
{
if (!create_p)
s->head = NULL;
*last_seg_ptr = s;
last_seg_ptr = &s->next;
- hash_insert (all_segs_hash, seg->name, s);
+ seg_info (seg)->dwarf2_line_seg = s;
}
gas_assert (seg == s->seg);
*pss = lss;
found_subseg:
- last_seg = seg;
- last_subseg = subseg;
- last_line_subseg = lss;
-
return lss;
}
void
dwarf2_init (void)
{
- all_segs_hash = hash_new ();
last_seg_ptr = &all_segs;
}
this section. sym->bsym and bfd_section->symbol should be the same. */
symbolS *sym;
+ /* Used by dwarf2dbg.c for this section's line table entries. */
+ void *dwarf2_line_seg;
+
union {
/* Current size of section holding stabs strings. */
unsigned long stab_string_size;
+2014-09-27 Alan Modra <amodra@gmail.com>
+
+ * gas/elf/group2.d, * gas/elf/group2.s: New test.
+ * gas/elf/elf.exp: Run it.
+
2014-09-23 H.J. Lu <hongjiu.lu@intel.com>
PR gas/17421
--- /dev/null
+#readelf: -SW
+#name: debug info in group section and non-group section with same name
+#source: group2.s
+# The RX port uses non-standard section names.
+#not-target: rx-*
+
+#...
+[ ]*\[.*\][ ]+\.group[ ]+GROUP.*
+#...
+[ ]*\[.*\][ ]+\.text\.startup[ ]+PROGBITS.*[ ]+AXG[ ]+.*
+[ ]*\[.*\][ ]+\.text\.startup[ ]+PROGBITS.*[ ]+AX[ ]+.*
+#pass
--- /dev/null
+ .file 1 "test.c"
+
+ .section .text.startup,"axG",%progbits,test,comdat
+ .loc 1 1
+ .org 8
+
+ .section .text.startup,"ax",%progbits
+ .loc 1 1
+ .org 8