mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 13:27:26 +08:00

The test gdb.python/py-format-address.exp, added in commit: commit 25209e2c6979c3838e14e099f0333609810db280 Date: Sat Oct 23 09:59:25 2021 +0100 gdb/python: add gdb.format_address function included 3 copy & paste errors where the wrong address was used in the expected output patterns. The test compiles two almost identical test binaries (one function changes its name, that's the only difference), two inferiors are created, each inferior using one of the test binaries. We then take the address of the name changing function in both inferiors ('foo' in inferior 1 and 'bar' in inferior 2) and the tests are carried out using these addresses. What we're checking for is that symbols 'foo' and 'bar' show up in the correct inferior, and that (as this test is for a Python API feature), the user can have one inferior selected, but ask about the other inferior, and see the correct symbol in the result. The hope is that the two binaries will be laid out identically by the compiler, and that 'foo' and 'bar' will be at the same address. This is fine, unless the executable is compiled as PIE (position independent executable), in which case there is a problem. The problem is that though inferior 1 is set running, the inferior 2 never is. If the executables are compiled as PIE, then the address in the inferior 2 will not have been resolved, while the address in the inferior 1 will have been, and so the two addresses we use in the tests will be different. This issue was reported here: https://sourceware.org/pipermail/gdb-patches/2022-March/186911.html The first part of the fix is to use the correct address variable in the expected output patterns, with this change the tests pass even when the executables are compiled as PIE. A second part of this fix is to pass the 'nopie' option when we compile the tests, this should ensure that the address obtained in inferior 2 is the same as the address from inferior 1, which makes the test more useful.
…
…
…
…
…
…
…
…
…
…
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.
Description
Languages
C
51.8%
Makefile
22.4%
Assembly
12.3%
C++
6%
Roff
1.4%
Other
5.4%