aboutsummaryrefslogtreecommitdiff
path: root/binutils/dwarf.h
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2020-04-29 16:01:40 +0100
committerNick Clifton <nickc@redhat.com>2020-04-29 16:01:40 +0100
commit1b513401599fc5c35a3a8ad0321e0b00a0bdb0f8 (patch)
tree60828bb944219b8162057ef6b1a843982045cce5 /binutils/dwarf.h
parentfc49bc72378b4402ca60baa5ff65f1392c92c279 (diff)
downloadgdb-1b513401599fc5c35a3a8ad0321e0b00a0bdb0f8.zip
gdb-1b513401599fc5c35a3a8ad0321e0b00a0bdb0f8.tar.gz
gdb-1b513401599fc5c35a3a8ad0321e0b00a0bdb0f8.tar.bz2
Add a warning if an emtpty SHT_REL, SHT_RELA or SHT_PROGBITS section is detected. Disable all warnings unless the (new) lint mode is enabled.
* readelf.c (warn): New function - like elfcomm.c version but only produces output if warnings are enabled. (struct options): Add --lint and --enable-checks. (usage): Add entry for --lint. (parse_args): Handle -L. If checks are enabled but no dumps have been selected then enable all dumps. (process_section_headers): Replace long if-then-else sequence with a switch. Add warning messages for empty SHT_REL, SHT_RELA and SHT_PROGBITS sections. (process_file): Do not complain if the file is an archive and lint mode has been enabled. * elfcomm.c (error): Make the function weak. (warn): Likewise. * NEWS: Mention the new feature. * doc/binutils.texi: Document the new feature. * dwarf.h (report_leb_status): Add file name and line number parameters. Include them in the diagnostic output. (READ_ULEB): Pass file and line number to report_leb_status. (READ_SLEB): Likewise. * dwarf.c (read_and_print_leb128): Pass file and line number to report_leb_status. * testsuite/binutils-all/readelf.exp: Add test of new feature. * testsuite/binutils-all/zero-sec.s: New test source file. * testsuite/binutils-all/zero-sec.r: Expected output from new test.
Diffstat (limited to 'binutils/dwarf.h')
-rw-r--r--binutils/dwarf.h22
1 files changed, 13 insertions, 9 deletions
diff --git a/binutils/dwarf.h b/binutils/dwarf.h
index 2249750..27f8a51 100644
--- a/binutils/dwarf.h
+++ b/binutils/dwarf.h
@@ -263,12 +263,12 @@ extern unsigned char * get_build_id (void *);
#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) \
@@ -277,7 +277,8 @@ report_leb_status (int status)
unsigned int _len; \
read_leb128 (start, end, FALSE, &_len, NULL); \
start += _len; \
- } while (0)
+ } \
+ while (0)
#define SKIP_SLEB(start, end) \
do \
@@ -285,7 +286,8 @@ report_leb_status (int status)
unsigned int _len; \
read_leb128 (start, end, TRUE, &_len, NULL); \
start += _len; \
- } while (0)
+ } \
+ while (0)
#define READ_ULEB(var, start, end) \
do \
@@ -299,8 +301,9 @@ report_leb_status (int status)
(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 \
@@ -314,5 +317,6 @@ report_leb_status (int status)
(var) = _val; \
if ((var) != _val) \
_status |= 2; \
- report_leb_status (_status); \
- } while (0)
+ report_leb_status (_status, __FILE__, __LINE__); \
+ } \
+ while (0)