diff options
author | Shahab Vahedi <shahab.vahedi@amd.com> | 2024-09-04 12:15:14 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2024-09-06 08:36:32 +0200 |
commit | 237df762d73a7fdf910277b0644df58688d2d87a (patch) | |
tree | 8cea227ad3ee3b2777893acc19f6f0d2bd54011f /bfd | |
parent | 4eb59a5243cbca011c58274a20235a163243f97f (diff) | |
download | gdb-237df762d73a7fdf910277b0644df58688d2d87a.zip gdb-237df762d73a7fdf910277b0644df58688d2d87a.tar.gz gdb-237df762d73a7fdf910277b0644df58688d2d87a.tar.bz2 |
bfd: Fix GCC warning when CFLAGS="-Og" is used
This patch initializes the "op" variable in skip_cfa_op() function
of bfd/elf-eh-frame.c to "0" at its declaration point to avoid the
"maybe-uninitialized" warning.
Building binutils on a system with GCC version 13.2.0 and a configure
command that sets the optimization level to "-Og" leads to a build
failure because of a warning being treated as an error:
---------------------------------------------------------------------
$ ./configure CFLAGS="-Og"
$ make
...
CC elf-eh-frame.lo
/src/gdb/bfd/elf-eh-frame.c: In function 'skip_cfa_op':
/src/gdb/bfd/elf-eh-frame.c:354:33: error: 'op' may be used
uninitialized [-Werror=maybe-uninitialized]
354 | switch (op & 0xc0 ? op & 0xc0 : op)
| ~~~~~~~~~~~~~~~~~~~~~~^~~~
/src/gdb/bfd/elf-eh-frame.c:348:12: note: 'op' was declared here
348 | bfd_byte op;
| ^~
cc1: all warnings being treated as errors
...
---------------------------------------------------------------------
The relevant code snippet related to this warning looks like:
---------------------------------------------------------------------
static inline bool
read_byte (bfd_byte **iter, bfd_byte *end, unsigned char *result)
{
if (*iter >= end)
return false;
*result = *((*iter)++);
return true;
}
static bool
skip_cfa_op (bfd_byte **iter, bfd_byte *end,...)
{
bfd_byte op;
if (!read_byte (iter, end, &op))
return false;
switch (op & 0xc0 ? op & 0xc0 : op)
...
}
---------------------------------------------------------------------
This warning probably happens because "-Og" results in GCC not
inlining the "read_byte()" function. Therefore, GCC treats its
invocation inside "skip_cfa_op()" like a black box and that ends
in the aforementioned warning.
Acknowledgement:
Lancelot Six -- for coming with the idea behind this fix.
Jan Beulich -- for reviewing.
bfd/ChangeLog:
* elf-eh-frame.c (skip_cfa_op): Initialize the "op" variable.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/elf-eh-frame.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index 902d7c1..ebe162f 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -345,7 +345,7 @@ next_cie_fde_offset (const struct eh_cie_fde *ent, static bool skip_cfa_op (bfd_byte **iter, bfd_byte *end, unsigned int encoded_ptr_width) { - bfd_byte op; + bfd_byte op = 0; bfd_vma length; if (!read_byte (iter, end, &op)) |