This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
RE: Go32-v2 native woes
- From: "Pierre Muller" <pierre dot muller at ics-cnrs dot unistra dot fr>
- To: <gdb at sourceware dot org>
- Date: Tue, 6 Apr 2010 16:07:30 +0200
- Subject: RE: Go32-v2 native woes
- References: <002a01cad517$d36eab90$7a4c02b0$@muller@ics-cnrs.unistra.fr>
After some investigation, I find a fix for this,
I will send it to gdb-patches list.
Pierre Muller
Pascal language support maintainer for GDB
> -----Message d'origine-----
> De?: gdb-owner@sourceware.org [mailto:gdb-owner@sourceware.org] De la
> part de Pierre Muller
> Envoyé?: Tuesday, April 06, 2010 1:29 AM
> À?: gdb@sourceware.org
> Objet?: Go32-v2 native woes
>
> There are again internal-error problems
> with go32v2 native about registers that are
> not correct.
>
> Current CVS gives this:
>
> Breakpoint 2 at 0xc485: file ../../src/gdb/cli/cli-cmds.c, line 223.
> (top-gdb) set prompt top>
> #Note top> is an older gdb that works fine.
> top> r ./gdb
> Starting program: e:/cygwin/usr/local/src/gdbcvs/djcvsbuild/gdb/gdb.exe
> ./gdb
> GNU gdb (GDB) 7.1.50.20100405-cvs
> Copyright (C) 2010 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law. Type "show
> copying"
> and "show warranty" for details.
> This GDB was configured as "--host=i586-pc-msdosdjgpp --target=djgpp".
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>...
>
> Breakpoint 1, internal_error (
> file=0xe6d70 "../../src/gdb/target-descriptions.c", line=1140,
> string=0xe6d55 "%s: Assertion `%s' failed.") at
> ../../src/gdb/utils.c:1050
> 1050 va_start (ap, string);
> top> bt
> #0 internal_error (file=0xe6d70 "../../src/gdb/target-descriptions.c",
> line=1140, string=0xe6d55 "%s: Assertion `%s' failed.")
> at ../../src/gdb/utils.c:1050
> #1 0x000e8cf2 in tdesc_use_registers (gdbarch=0x46eda0,
> target_desc=0x3ed480,
> early_data=0x46fd90) at ../../src/gdb/target-descriptions.c:1140
> #2 0x0013a17c in i386_gdbarch_init (info=..., arches=0x0)
> at ../../src/gdb/i386-tdep.c:6699
> #3 0x0004dbd6 in gdbarch_find_by_info (info=...)
> at ../../src/gdb/gdbarch.c:3979
> #4 0x00088785 in set_gdbarch_from_file (abfd=0x42c0a0)
> at ../../src/gdb/arch-utils.c:552
> #5 0x00017c8b in exec_file_attach (filename=0x3eaeb8 "./gdb",
> from_tty=1)
> at ../../src/gdb/exec.c:296
> #6 0x000256dd in catch_command_errors (command=0x179e7
> <exec_file_attach>,
> arg=0x3eaeb8 "./gdb", from_tty=1, mask=6) at
> ../../src/gdb/exceptions.c:525
> #7 0x00002a2a in captured_main (data=0x3ea208) at
> ../../src/gdb/main.c:808
> #8 0x00025649 in catch_errors (func=0x1dfa <captured_main>,
> func_args=0x3ea208, errstring=0x1b94 "", mask=6)
> at ../../src/gdb/exceptions.c:510
> #9 0x00002d72 in gdb_main (args=0x3ea208) at ../../src/gdb/main.c:916
> #10 0x0000180d in main (argc=2, argv=0x3eaed8) at
> ../../src/gdb/gdb.c:33
> top> f 1
> #1 0x000e8cf2 in tdesc_use_registers (gdbarch=0x46eda0,
> target_desc=0x3ed480,
> early_data=0x46fd90) at ../../src/gdb/target-descriptions.c:1140
> 1140 gdb_assert (VEC_length (tdesc_arch_reg, data->arch_regs) <=
> num_regs);
>
> top> p num_regs
> $1 = 32
> top> p *data.arch_regs
> $2 = {num = 33, alloc = 36, vec = {{reg = 0x3ed6d8, type = 0x0}}}
> top>
>
> The additional reg in arch_regs seems to come from
> i386_validate_tdesc_p function:
> /* Need to include %mxcsr, so add one. */
> num_regs += tdep->num_xmm_regs + 1;
>
> Adding this condition
> if (tdep->num_xmm_regs)
> removes the problem above,
> but I get another error later:
> Breakpoint 1 at 0x479d: file ../../src/gdb/utils.c, line 1050.
> Breakpoint 2 at 0xc485: file ../../src/gdb/cli/cli-cmds.c, line 223.
> (top-gdb) start
> Temporary breakpoint 3 at 0x17d4: file ../../src/gdb/gdb.c, line 28.
> Starting program: e:/cygwin/usr/local/src/gdbcvs/djcvsbuild/gdb/gdb.exe
>
> Temporary breakpoint 3, main (argc=1, argv=0x3eae78) at
> ../../src/gdb/gdb.c:28
> 28 memset (&args, 0, sizeof args);
> (top-gdb) inf reg
> eax 0x10 16
> ecx 0x0 0
> edx 0x100 256
> ebx 0x3f6 1014
> esp 0x3ea1f0 0x3ea1f0
> ebp 0x3ea220 0x3ea220
> esi 0x54 84
> edi 0x36a258 3580504
> eip 0x17d4 0x17d4 <main+28>
> eflags 0x3206 [ PF IF #12 #13 ]
> cs 0x28f 655
> ss 0x297 663
> ds 0x297 663
> es 0x297 663
> fs 0x2a7 679
> gs 0x2a7 679
>
> Breakpoint 1, internal_error (file=0x1286ab "../../src/gdb/go32-nat.c",
> line=546, string=0x128680 "Invalid register no. %d in
> fetch_register.")
> at ../../src/gdb/utils.c:1050
> 1050 va_start (ap, string);
>
> GDB is trying to display register 32 which is normally "xmm0"
> and thus should not be displayed for go32v2.
>
> I was not able o fix that second problem :(
>
> Pierre Muller
> Pascal language support maintainer for GDB
> and old-DOS lover ...