mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-23 01:08:50 +08:00
e4439e4346ec0d2cb0e65b497d26382e1054c93b

Consistently supply hardwired $zero as a zeroed register, correcting issues with the PTRACE_GETREGS path that currently copies the value of $restart into $zero as illustrated by this program: $ cat read.c int main (void) { char buf[1024]; ssize_t size; size = read (0, buf, sizeof (buf)); return size; } $ and this corresponding debug session: (gdb) break main Breakpoint 1 at 0x120000970: file read.c, line 9. (gdb) target remote :2346 Remote debugging using :2346 Reading symbols from .../sysroot/mips-r2-hard/lib64/ld.so.1...done. 0x000000fff7fca5a0 in __start () from .../sysroot/mips-r2-hard/lib64/ld.so.1 (gdb) continue Continuing. Breakpoint 1, main () at read.c:9 9 size = read (0, buf, sizeof (buf)); (gdb) info registers zero at v0 v1 R0 0000000000000000 0000000000000001 000000fff7ffe710 0000000000000000 a0 a1 a2 a3 R4 0000000000000001 000000ffffffeb88 000000ffffffeb98 0000000000000000 a4 a5 a6 a7 R8 000000fff7fc8800 000000fff7fc38f0 000000ffffffeb80 2f2f2f2f2f2f2f2f t0 t1 t2 t3 R12 0000000000000437 0000000000000002 000000fff7ffd000 0000000120000a00 s0 s1 s2 s3 R16 000000fff7fc7068 0000000120000b90 0000000000000000 0000000000000000 s4 s5 s6 s7 R20 0000000000521d88 0000000000522608 0000000000000000 0000000000000000 t8 t9 k0 k1 R24 0000000000000000 0000000120000970 0000000000000000 0000000000000000 gp sp s8 ra R28 000000fff7fc8800 000000ffffffea50 0000000000000000 000000fff7e4088c status lo hi badvaddr 0000000000109cf3 0000000000005ea5 0000000000000211 000000fff7eadf00 cause pc 0000000000800024 0000000120000970 fcsr fir restart 00000000 00f30000 0000000000000000 (gdb) continue Continuing. ^C Program received signal SIGINT, Interrupt. 0x000000fff7f084ac in __GI___libc_read (fd=0, buf=0xffffffe640, nbytes=1024) at ../sysdeps/unix/sysv/linux/read.c:27 27 return SYSCALL_CANCEL (read, fd, buf, nbytes); (gdb) info registers zero at v0 v1 R0 0000000000001388 0000000000000001 0000000000000200 000000fff7ffe710 a0 a1 a2 a3 R4 0000000000000000 000000ffffffe640 0000000000000400 0000000000000001 a4 a5 a6 a7 R8 000000fff7fc8800 000000fff7fc38f0 000000ffffffeb80 2f2f2f2f2f2f2f2f t0 t1 t2 t3 R12 00000000000005e3 0000000000000002 000000fff7ffd000 000000012000099c s0 s1 s2 s3 R16 000000fff7fc7068 0000000120000b90 0000000000000000 0000000000000000 s4 s5 s6 s7 R20 0000000000521d88 0000000000522608 0000000000000000 0000000000000000 t8 t9 k0 k1 R24 0000000000000000 000000fff7f2da20 0000000000000000 0000000000000000 gp sp s8 ra R28 000000fff7fc8800 000000ffffffe600 0000000000000000 000000012000099c status lo hi badvaddr 0000000000109cf3 00000000000001e6 00000000000000be 000000fff7f08470 cause pc 0000000000800020 000000fff7f084ac fcsr fir restart 00000000 00f30000 0000000000001388 (gdb) and with the PTRACE_PEEKUSR path that does not supply this register at all, causing issues analogous to ones addressed for the native MIPS backend with commit 4e6ff0e1b86f ("MIPS/Linux/native: Supply $zero for the !PTRACE_GETREGS case"): (gdb) info registers zero at v0 v1 R0 <unavailable> 0000000000000001 0000000000000001 0000000000000000 a0 a1 a2 a3 R4 00000001200212b0 0000000000000000 0000000000000021 000000012001a260 a4 a5 a6 a7 R8 000000012001a260 0000000000000004 800000010cab1680 fffffffffffffff8 t0 t1 t2 t3 R12 0000000000000000 000000fff7edab68 0000000000000001 0000000000000000 s0 s1 s2 s3 R16 000000fff7ee2068 0000000120008b80 0000000000000000 0000000000000000 s4 s5 s6 s7 R20 000000000052e5c8 000000000052f008 0000000000000000 0000000000000000 t8 t9 k0 k1 R24 0000000000000000 00000001200027c0 0000000000000000 0000000000000000 gp sp s8 ra R28 00000001200212b0 000000ffffffc880 000000ffffffc880 0000000120005ee8 status lo hi badvaddr <unavailable> 0000000000943efe 000000000000000e 000000012001a008 cause pc 0000000000800024 0000000120005ee8 fcsr fir restart 0e800000 00f30000 0000000000000000 (gdb) and (under certain circumstances): (gdb) next Register 0 is not available (gdb) The problem with PTRACE_GETREGS happens because `mips_store_gregset' supplies the contents of register slot #0, occupied by $restart, to $zero. The problem with PTRACE_PEEKUSR happens because for $zero `mips_cannot_fetch_register' returns one, and no alternative way to supply that register has been defined. Correct `mips_store_gregset' then for the PTRACE_GETREGS case and add `mips_fetch_register' for the PTRACE_PEEKUSR case. gdb/gdbserver/ * linux-mips-low.c (mips_fetch_register): New function. Update preceding comment. (mips_store_gregset): Supply 0 rather than $restart for $zero. (the_low_target): Wire `mips_fetch_register'.
…
…
…
…
…
…
…
…
…
…
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%