{
dwarf_vma li_length;
unsigned short li_version;
+ unsigned char li_address_size;
+ unsigned char li_segment_size;
dwarf_vma li_prologue_length;
unsigned char li_min_insn_length;
unsigned char li_max_ops_per_insn;
extern int do_wide;
extern int do_debug_links;
extern int do_follow_links;
+extern bfd_boolean do_checks;
extern int dwarf_cutoff_level;
extern unsigned long dwarf_start_die;
#endif
static inline void
-report_leb_status (int status)
+report_leb_status (int status, const char *file, unsigned long lnum)
{
if ((status & 1) != 0)
- error (_("LEB end of data\n"));
+ error (_("%s:%lu: end of data encountered whilst reading LEB\n"), file, lnum);
else if ((status & 2) != 0)
- error (_("LEB value too large\n"));
+ error (_("%s:%lu: read LEB value is too large to store in destination variable\n"), file, lnum);
}
#define SKIP_ULEB(start, end) \
unsigned int _len; \
read_leb128 (start, end, FALSE, &_len, NULL); \
start += _len; \
- } while (0)
+ } \
+ while (0)
#define SKIP_SLEB(start, end) \
do \
unsigned int _len; \
read_leb128 (start, end, TRUE, &_len, NULL); \
start += _len; \
- } while (0)
+ } \
+ while (0)
#define READ_ULEB(var, start, end) \
do \
(var) = _val; \
if ((var) != _val) \
_status |= 2; \
- report_leb_status (_status); \
- } while (0)
+ report_leb_status (_status, __FILE__, __LINE__); \
+ } \
+ while (0)
#define READ_SLEB(var, start, end) \
do \
(var) = _val; \
if ((var) != _val) \
_status |= 2; \
- report_leb_status (_status); \
- } while (0)
+ report_leb_status (_status, __FILE__, __LINE__); \
+ } \
+ while (0)