{
struct line_subseg *ss;
struct line_entry *e;
+ static unsigned int line = -1;
+ static unsigned int filenum = -1;
/* Early out for as-yet incomplete location information. */
if (loc->filenum == 0 || loc->line == 0)
return;
+ /* Don't emit sequences of line symbols for the same line. */
+ if (line == loc->line && filenum == loc->filenum)
+ return;
+
+ line = loc->line;
+ filenum = loc->filenum;
+
e = (struct line_entry *) xmalloc (sizeof (*e));
e->next = NULL;
e->frag = frag_now;
for (fr = frchain_root; fr; fr = fr->frch_next)
if (fr->frch_last == frag)
{
- return ((char *) obstack_next_free (&fr->frch_obstack)
- - frag->fr_literal);
+ long align_mask = -1 << get_recorded_alignment (fr->frch_seg);
+ return (((char *) obstack_next_free (&fr->frch_obstack)
+ - frag->fr_literal) + ~align_mask) & align_mask;
}
abort ();