Strange backtrace from GDB 7.5.91

Eli Zaretskii
2013-03-20T17:45:09Z

I saw today a very strange backtrace, while debugging with GDB 7.5.91,
which I got by stepping through relocate_gdb_directory:

(top-gdb) s
relocate_path (flag=1, initial=0x71a51b "d:/usr/share/gdb",
progname=0x260ed0 "d:\\usr\\eli\\utils\\gdb-7.5.91\\gdb\\gdb.exe")
at main.c:124
124 dir = relocate_path (gdb_program_name, initial, flag);
(top-gdb) bt
#0 relocate_path (flag=1, initial=0x71a51b "d:/usr/share/gdb",
progname=0x260ed0 "d:\\usr\\eli\\utils\\gdb-7.5.91\\gdb\\gdb.exe")
at main.c:124
#1 relocate_gdb_directory (
initial=initial@entry=0x71a51b "d:/usr/share/gdb", flag=flag@entry=1)
at main.c:124
#2 0x004f0b1d in captured_main (data=data@entry=0x572ff10) at main.c:399

But relocate_path's argument list is this:

relocate_path (const char *progname, const char *initial, int flag)

i.e., the FLAG argument is the last one, not the first one.

After one more "step", relocate_path appears twice in the backtrace,
once with correct order of arguments, the other one with an incorrect
order:

(top-gdb) s
relocate_path (initial=0x71a51b "d:/usr/share/gdb",
progname=0x260ed0 "d:\\usr\\eli\\utils\\gdb-7.5.91\\gdb\\gdb.exe",
flag=<optimized out>) at main.c:109
109 return make_relative_prefix (progname, BINDIR, initial);
(top-gdb) bt
#0 relocate_path (initial=0x71a51b "d:/usr/share/gdb",
progname=0x260ed0 "d:\\usr\\eli\\utils\\gdb-7.5.91\\gdb\\gdb.exe",
flag=<optimized out>) at main.c:109
#1 relocate_path (flag=1, initial=0x71a51b "d:/usr/share/gdb",
progname=0x260ed0 "d:\\usr\\eli\\utils\\gdb-7.5.91\\gdb\\gdb.exe")
at main.c:120
#2 relocate_gdb_directory (
initial=initial@entry=0x71a51b "d:/usr/share/gdb", flag=flag@entry=1)
at main.c:124
#3 0x004f0b1d in captured_main (data=data@entry=0x572ff10) at main.c:399

Is this due to inlining or something? Is this a bug?

The compiler was GCC 4.7.2, if that matters, and the compilation
switches were "-g3 -O2". MinGW GCC produced DWARF-2 debug info.