Go to file
Shahab Vahedi 237df762d7 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.
2024-09-06 08:36:32 +02:00
bfd bfd: Fix GCC warning when CFLAGS="-Og" is used 2024-09-06 08:36:32 +02:00
binutils get_type_abbrev_from_form tidy 2024-08-29 21:05:57 +09:30
config
contrib Revert "contrib: Add autoregen.py" 2024-09-04 13:38:57 +00:00
cpu Add markers for 2.43 branch/release 2024-07-20 12:43:19 +01:00
elfcpp Add markers for 2.43 branch/release 2024-07-20 12:43:19 +01:00
etc
gas x86/APX: use D for 2-operand CFCMOVcc 2024-09-06 08:35:42 +02:00
gdb Improve comments in dwarf2/parent-map.h 2024-09-04 12:05:45 -06:00
gdbserver gdbserver: aarch64: Fix expedited registers list 2024-09-05 01:02:51 -03:00
gdbsupport gdb: avoid '//' in filenames when searching for debuginfo 2024-08-19 15:02:56 +01:00
gnulib
gold gold: Always resolve non-default weak undefined to 0 2024-08-31 04:28:43 -07:00
gprof Change version to 2.43.50 2024-07-20 13:16:33 +01:00
gprofng Fix 32097 Warnings when building gprofng with Clang 2024-09-04 13:49:21 -07:00
include RISC-V: Add support for XCVsimd extension in CV32E40P 2024-09-03 12:02:28 +08:00
ld arm: Do not insert stubs needing Arm code on Thumb-only cores. 2024-09-04 13:35:10 +00:00
libbacktrace
libctf PR32093, -Walloc-size warning in ctf-hash.c 2024-08-29 21:05:57 +09:30
libdecnumber
libiberty libiberty: sync with gcc 2024-09-04 15:35:42 +01:00
libsframe libsframe: remove runstatedir in Makefile.in 2024-07-10 10:24:45 +02:00
opcodes x86/APX: use D for 2-operand CFCMOVcc 2024-09-06 08:35:42 +02:00
readline
sim sim: pru: Fix test case assembly with latest GAS 2024-08-12 23:33:59 +03:00
texinfo
zlib
.cvsignore
.editorconfig
.gitattributes
.gitignore
.pre-commit-config.yaml pre-commit: autoupdate 2024-08-12 13:07:59 -04:00
ar-lib
ChangeLog Add markers for 2.43 branch/release 2024-07-20 12:43:19 +01:00
compile
config-ml.in
config.guess Synchronize config.[sub|guess] with the latest versions from the config project. 2024-07-15 10:22:54 +01:00
config.rpath
config.sub Synchronize config.[sub|guess] with the latest versions from the config project. 2024-07-15 10:22:54 +01:00
configure Disable gprofng build for *musl* 2024-08-26 13:48:29 -07:00
configure.ac Disable gprofng build for *musl* 2024-08-26 13:48:29 -07:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.LIBGLOSS
COPYING.NEWLIB
depcomp
djunpack.bat
install-sh
libtool.m4
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS
Makefile.def
Makefile.in
Makefile.tpl
makefile.vms
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
README-maintainer-mode
SECURITY.txt
setup.com
src-release.sh
symlink-tree
test-driver
ylwrap

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.