summaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog13
-rw-r--r--binutils/dwarf.c24
-rw-r--r--binutils/dwarf.h10
3 files changed, 26 insertions, 21 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index be5fd77b83..6f4946b36a 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,16 @@
+2021-07-10 Alan Modra <amodra@gmail.com>
+
+ PR 28069
+ * dwarf.c (display_discr_list): Remove assertions. Delete "end"
+ parameter, use initial "data" pointer as the end. Formatting.
+ Don't count down bytes as they are read.
+ (read_and_display_attr_value): Adjust display_discr_list call.
+ (read_and_print_leb128): Don't pass __FILE__ and __LINE__ to
+ report_leb_status.
+ * dwarf.h (report_leb_status): Don't report file and line
+ numbers. Delete file and lnum parameters,
+ (READ_ULEB, READ_SLEB): Adjust.
+
2021-07-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.ac: Check for strnlen declaration.
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index ad1ee97d9b..fbd5d6aea5 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -2280,7 +2280,7 @@ read_and_print_leb128 (unsigned char *data,
int status;
dwarf_vma val = read_leb128 (data, end, is_signed, bytes_read, &status);
if (status != 0)
- report_leb_status (status, __FILE__, __LINE__);
+ report_leb_status (status);
else
printf ("%s", dwarf_vmatoa (is_signed ? "d" : "u", val));
}
@@ -2289,9 +2289,10 @@ static void
display_discr_list (unsigned long form,
dwarf_vma uvalue,
unsigned char * data,
- unsigned const char * end,
int level)
{
+ unsigned char *end = data;
+
if (uvalue == 0)
{
printf ("[default]");
@@ -2320,41 +2321,32 @@ display_discr_list (unsigned long form,
return;
}
- bool is_signed =
- (level > 0 && level <= MAX_CU_NESTING)
- ? level_type_signed [level - 1] : false;
+ bool is_signed = (level > 0 && level <= MAX_CU_NESTING
+ ? level_type_signed [level - 1] : false);
printf ("(");
- while (uvalue)
+ while (data < end)
{
unsigned char discriminant;
unsigned int bytes_read;
SAFE_BYTE_GET_AND_INC (discriminant, data, 1, end);
- -- uvalue;
- assert (uvalue > 0);
switch (discriminant)
{
case DW_DSC_label:
printf ("label ");
read_and_print_leb128 (data, & bytes_read, end, is_signed);
- assert (bytes_read <= uvalue && bytes_read > 0);
- uvalue -= bytes_read;
data += bytes_read;
break;
case DW_DSC_range:
printf ("range ");
read_and_print_leb128 (data, & bytes_read, end, is_signed);
- assert (bytes_read <= uvalue && bytes_read > 0);
- uvalue -= bytes_read;
data += bytes_read;
printf ("..");
read_and_print_leb128 (data, & bytes_read, end, is_signed);
- assert (bytes_read <= uvalue && bytes_read > 0);
- uvalue -= bytes_read;
data += bytes_read;
break;
@@ -2365,7 +2357,7 @@ display_discr_list (unsigned long form,
return;
}
- if (uvalue)
+ if (data < end)
printf (", ");
}
@@ -3230,7 +3222,7 @@ read_and_display_attr_value (unsigned long attribute,
case DW_AT_discr_list:
printf ("\t");
- display_discr_list (form, uvalue, data, end, level);
+ display_discr_list (form, uvalue, data, level);
break;
case DW_AT_frame_base:
diff --git a/binutils/dwarf.h b/binutils/dwarf.h
index 2070c6f3da..887b720f63 100644
--- a/binutils/dwarf.h
+++ b/binutils/dwarf.h
@@ -264,12 +264,12 @@ extern unsigned char * get_build_id (void *);
#endif
static inline void
-report_leb_status (int status, const char *file, unsigned long lnum)
+report_leb_status (int status)
{
if ((status & 1) != 0)
- error (_("%s:%lu: end of data encountered whilst reading LEB\n"), file, lnum);
+ error (_("end of data encountered whilst reading LEB\n"));
else if ((status & 2) != 0)
- error (_("%s:%lu: read LEB value is too large to store in destination variable\n"), file, lnum);
+ error (_("read LEB value is too large to store in destination variable\n"));
}
#define SKIP_ULEB(start, end) \
@@ -302,7 +302,7 @@ report_leb_status (int status, const char *file, unsigned long lnum)
(var) = _val; \
if ((var) != _val) \
_status |= 2; \
- report_leb_status (_status, __FILE__, __LINE__); \
+ report_leb_status (_status); \
} \
while (0)
@@ -318,6 +318,6 @@ report_leb_status (int status, const char *file, unsigned long lnum)
(var) = _val; \
if ((var) != _val) \
_status |= 2; \
- report_leb_status (_status, __FILE__, __LINE__); \
+ report_leb_status (_status); \
} \
while (0)