+2019-11-25 Christian Eggers <ceggers@gmx.de>
+
+ * dwarf2dbg.c (out_set_addr): Revert 2019-03-13 change.
+ (out_debug_line, out_debug_aranges, out_debug_info): Likewise.
+ * symbols.h (symbol_set_value_now_octets, symbol_octets_p): Remove.
+ * symbols.c (struct symbol_flags): Remove member sy_octets.
+ (symbol_temp_new_now_octets): Don't set symbol_flags::sy_octets.
+ (resolve_symbol_value): Revert: Return octets instead of bytes if
+ sy_octets is set.
+ (symbol_set_value_now_octets): Remove.
+ (symbol_octets_p): Remove.
+
2019-11-22 Mihail Ionescu <mihail.ionescu@arm.com>
* config/tc-arm.c (arm_ext_crc): New.
/* Set an absolute address (may result in a relocation entry). */
-static void
-out_inc_line_addr (int line_delta, addressT addr_delta);
-
static void
out_set_addr (symbolS *sym)
{
expressionS exp;
- addressT expr_addr, expr_addr_aligned;
memset (&exp, 0, sizeof exp);
+ out_opcode (DW_LNS_extended_op);
+ out_uleb128 (sizeof_address + 1);
- /* The expression at the bottom must be aligned to OCTETS_PER_BYTE. The
- statements after the for loop will contribute 3 more octets. */
- expr_addr = frag_now_fix_octets () + 3;
- expr_addr_aligned = (expr_addr + OCTETS_PER_BYTE - 1) & -OCTETS_PER_BYTE;
- for ( ; expr_addr != expr_addr_aligned; expr_addr++)
- out_inc_line_addr (0, 0); /* NOP */
-
- out_opcode (DW_LNS_extended_op); /* 1 octet */
- out_uleb128 (sizeof_address + 1); /* 1 octet */
-
- out_opcode (DW_LNE_set_address); /* 1 octet */
+ out_opcode (DW_LNE_set_address);
exp.X_op = O_symbol;
exp.X_add_symbol = sym;
exp.X_add_number = 0;
symbolS *line_end;
struct line_seg *s;
int sizeof_offset;
- addressT section_end, section_end_aligned;
memset (&exp, 0, sizeof exp);
sizeof_offset = out_header (line_seg, &exp);
exp.X_op_symbol = prologue_start;
exp.X_add_number = 0;
emit_expr (&exp, sizeof_offset);
- symbol_set_value_now_octets (prologue_start);
+ symbol_set_value_now (prologue_start);
/* Parameters of the state machine. */
out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
out_file_list ();
- symbol_set_value_now_octets (prologue_end);
+ symbol_set_value_now (prologue_end);
/* For each section, emit a statement program. */
for (s = all_segs; s; s = s->next)
in the DWARF Line Number header. */
subseg_set (subseg_get (".debug_line_end", FALSE), 0);
- /* Pad size of .debug_line section to a multiple of OCTETS_PER_BYTE.
- Simply sizing the section in md_section_align() is not sufficient,
- also the size field in the .debug_line header must be a multiple
- of OCTETS_PER_BYTE. Not doing so will introduce gaps within the
- .debug_line sections after linking. */
- section_end = frag_now_fix_octets ();
- section_end_aligned = (section_end + OCTETS_PER_BYTE - 1) & -OCTETS_PER_BYTE;
- for ( ; section_end != section_end_aligned; section_end++)
- out_inc_line_addr (0, 0); /* NOP */
-
- symbol_set_value_now_octets (line_end);
+ symbol_set_value_now (line_end);
}
static void
md_number_to_chars (p, 0, addr_size);
md_number_to_chars (p + addr_size, 0, addr_size);
- symbol_set_value_now_octets (aranges_end);
+ symbol_set_value_now (aranges_end);
}
/* Emit data for .debug_abbrev. Note that this must be kept in
dwarf2 draft has no standard code for assembler. */
out_two (DW_LANG_Mips_Assembler);
- symbol_set_value_now_octets (info_end);
+ symbol_set_value_now (info_end);
}
/* Emit the three debug strings needed in .debug_str and setup symbols
before. It is cleared as soon as any direct reference to the
symbol is present. */
unsigned int sy_weakrefd : 1;
-
- /* This if set if the unit of the symbol value is "octets" instead
- of "bytes". */
- unsigned int sy_octets : 1;
};
/* The information we keep for a symbol. Note that the symbol table
symbolS *
symbol_temp_new_now_octets (void)
{
- symbolS * symb = symbol_temp_new (now_seg, frag_now_fix_octets (), frag_now);
- symb->sy_flags.sy_octets = 1;
- return symb;
+ return symbol_temp_new (now_seg, frag_now_fix_octets (), frag_now);
}
symbolS *
/* Fall through. */
case O_constant:
- if (symp->sy_flags.sy_octets)
- final_val += symp->sy_frag->fr_address;
- else
- final_val += symp->sy_frag->fr_address / OCTETS_PER_BYTE;
+ final_val += symp->sy_frag->fr_address / OCTETS_PER_BYTE;
if (final_seg == expr_section)
final_seg = absolute_section;
/* Fall through. */
symbol_set_frag (sym, frag_now);
}
-/* Set the value of SYM to the current position in the current segment,
- in octets. */
-
-void
-symbol_set_value_now_octets (symbolS *sym)
-{
- S_SET_SEGMENT (sym, now_seg);
- S_SET_VALUE (sym, frag_now_fix_octets ());
- symbol_set_frag (sym, frag_now);
- sym->sy_flags.sy_octets = 1;
-}
-
/* Set the frag of a symbol. */
void
/* else XXX - What do we do now ? */
}
-/* Return whether symbol unit is "octets" (instead of "bytes"). */
-
-int symbol_octets_p (symbolS *s)
-{
- return s->sy_flags.sy_octets;
-}
-
#ifdef OBJ_SYMFIELD_TYPE
/* Get a pointer to the object format information for a symbol. */
extern void symbol_set_value_expression (symbolS *, const expressionS *);
extern offsetT *symbol_X_add_number (symbolS *);
extern void symbol_set_value_now (symbolS *);
-extern void symbol_set_value_now_octets (symbolS *);
extern void symbol_set_frag (symbolS *, fragS *);
extern fragS *symbol_get_frag (symbolS *);
extern void symbol_mark_used (symbolS *);
extern asymbol *symbol_get_bfdsym (symbolS *);
extern void symbol_set_bfdsym (symbolS *, asymbol *);
extern int symbol_same_p (symbolS *, symbolS *);
-extern int symbol_octets_p (symbolS *);
#ifdef OBJ_SYMFIELD_TYPE
OBJ_SYMFIELD_TYPE *symbol_get_obj (symbolS *);