Re: [RFC] Gdb line table implementation tweak

Jim Blandy
2002-02-27T21:43:27Z

Mark Kettenis <kettenis@kettenis.dyndns.org> writes:
> Unfortunately, this patch turns quite a few PASSes into FAILS on
> i386-unknown-freebsd4.4. Here's a diff of the test summary before and
> after applying the patch. Are we sure this patch is an improvement?

This patch addresses a lot of long-standing problems in GDB's handling
of C++ link-once sections; I'm pretty sure it's a step forward,
overall. I think we should put a good effort into fixing up the patch
before we consider backing it out.

Fred, could you look into these failures?

>
> --- gdb.sum.orig Sat Feb 23 22:21:50 2002
> +++ gdb.sum Sat Feb 23 22:35:10 2002
> @@ -1,4 +1,4 @@
> -Test Run By kettenis on Sat Feb 23 22:14:32 2002
> +Test Run By kettenis on Sat Feb 23 22:27:38 2002
> Native configuration is i386-unknown-freebsd4.4
>
> === gdb tests ===
> @@ -358,21 +358,21 @@
> PASS: gdb.base/call-ar-st.exp: continuing to breakpoint 1220, pattern 8
> PASS: gdb.base/call-ar-st.exp: continuing to breakpoint 1220, pattern 9
> PASS: gdb.base/call-ar-st.exp: continuing to breakpoint 1220, pattern 10 + sentinel
> -PASS: gdb.base/call-ar-st.exp: step inside print_all_arrays
> -PASS: gdb.base/call-ar-st.exp: next over print_int_array in print-all_arrays
> -PASS: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 1
> -PASS: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 2
> -PASS: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 3
> -PASS: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 4
> -PASS: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 5 + sentinel
> +FAIL: gdb.base/call-ar-st.exp: step inside print_all_arrays
> +FAIL: gdb.base/call-ar-st.exp: next over print_int_array in print-all_arrays
> +FAIL: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 1
> +UNRESOLVED: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 2
> +UNRESOLVED: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 3
> +UNRESOLVED: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 4
> +UNRESOLVED: gdb.base/call-ar-st.exp: print print_double_array(array_d), pattern 5 + sentinel
> PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1236
> -PASS: gdb.base/call-ar-st.exp: continuing to 1236, pattern 1
> -PASS: gdb.base/call-ar-st.exp: continuing to 1236, pattern 2
> -PASS: gdb.base/call-ar-st.exp: continuing to 1236, pattern 3
> -PASS: gdb.base/call-ar-st.exp: continuing to 1236, pattern 4
> -PASS: gdb.base/call-ar-st.exp: continuing to 1236, pattern 5
> -PASS: gdb.base/call-ar-st.exp: continuing to 1236, pattern 6
> -PASS: gdb.base/call-ar-st.exp: continuing to 1236, pattern 7 + sentinel
> +FAIL: gdb.base/call-ar-st.exp: continuing to 1236, pattern 1
> +UNRESOLVED: gdb.base/call-ar-st.exp: continuing to 1236, pattern 2
> +UNRESOLVED: gdb.base/call-ar-st.exp: continuing to 1236, pattern 3
> +UNRESOLVED: gdb.base/call-ar-st.exp: continuing to 1236, pattern 4
> +UNRESOLVED: gdb.base/call-ar-st.exp: continuing to 1236, pattern 5
> +UNRESOLVED: gdb.base/call-ar-st.exp: continuing to 1236, pattern 6
> +UNRESOLVED: gdb.base/call-ar-st.exp: continuing to 1236, pattern 7 + sentinel
> PASS: gdb.base/call-ar-st.exp: print sum_array_print(10, *list1, *list2, *list3, *list4)
> PASS: gdb.base/call-ar-st.exp: next to 1237
> PASS: gdb.base/call-ar-st.exp: print print_array_rep(*list1, *list2, *list3)
> @@ -461,7 +461,7 @@
> PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1300
> PASS: gdb.base/call-ar-st.exp: continue to 1300
> FAIL: gdb.base/call-ar-st.exp: step into init_bit_flags_combo
> -PASS: gdb.base/call-ar-st.exp: print print_bit_flags_combo from init_bit_flags_combo
> +FAIL: gdb.base/call-ar-st.exp: print print_bit_flags_combo from init_bit_flags_combo
> PASS: gdb.base/call-ar-st.exp: tbreakpoint line 1305
> PASS: gdb.base/call-ar-st.exp: continue to 1305
> PASS: gdb.base/call-ar-st.exp: print print_long_arg_list, pattern 1
> @@ -1385,18 +1385,18 @@
> PASS: gdb.base/display.exp: disab 3
> PASS: gdb.base/display.exp: watch off
> PASS: gdb.base/display.exp: finish
> -PASS: gdb.base/display.exp: step
> +FAIL: gdb.base/display.exp: step
> PASS: gdb.base/display.exp: tbreak 37
> -PASS: gdb.base/display.exp: cont
> +FAIL: gdb.base/display.exp: cont: the program exited
> PASS: gdb.base/display.exp: printf
> PASS: gdb.base/display.exp: printf %d
> PASS: gdb.base/display.exp: printf "%d
> -PASS: gdb.base/display.exp: printf "%d%d",i
> +FAIL: gdb.base/display.exp: printf "%d%d",i
> PASS: gdb.base/display.exp: printf "\\!\a\f\r\t\v\b\n"
> PASS: gdb.base/display.exp: re-set term
> PASS: gdb.base/display.exp: printf "\w"
> PASS: gdb.base/display.exp: printf "%d" j
> -PASS: gdb.base/display.exp: print/r j
> +FAIL: gdb.base/display.exp: print/r j
> PASS: gdb.base/display.exp: debug test output
> PASS: gdb.base/display.exp: x/0 j
> PASS: gdb.base/display.exp: print/0 j
> @@ -1404,7 +1404,7 @@
> PASS: gdb.base/display.exp: no i
> PASS: gdb.base/display.exp: print/a &sum
> PASS: gdb.base/display.exp: print/a main+4
> -PASS: gdb.base/display.exp: print/a $pc
> +FAIL: gdb.base/display.exp: print/a $pc
> PASS: gdb.base/display.exp: print/a &&j
> Running ../../../../src/src/gdb/testsuite/gdb.base/echo.exp ...
> PASS: gdb.base/echo.exp: Echo test
> @@ -2107,9 +2107,9 @@
> PASS: gdb.base/funcargs.exp: finish from indirectly called function
> FAIL: gdb.base/funcargs.exp: stepping into indirectly called function
> PASS: gdb.base/funcargs.exp: finish from marker_call_with_trampolines
> -PASS: gdb.base/funcargs.exp: stepping into function called with trampolines
> -PASS: gdb.base/funcargs.exp: backtrace through call with trampolines
> -PASS: gdb.base/funcargs.exp: stepping back to main from function called with trampolines
> +FAIL: gdb.base/funcargs.exp: stepping into function called with trampolines
> +FAIL: gdb.base/funcargs.exp: backtrace through call with trampolines
> +FAIL: gdb.base/funcargs.exp: stepping back to main from function called with trampolines
> Running ../../../../src/src/gdb/testsuite/gdb.base/gcore.exp ...
> PASS: gdb.base/gcore.exp: help gcore
> PASS: gdb.base/gcore.exp: set breakpoint at terminal_func
> @@ -2507,14 +2507,15 @@
> FAIL: gdb.base/list.exp: list list0.c:main
> FAIL: gdb.base/list.exp: list list0.c:unused
> FAIL: gdb.base/list.exp: list list0.h:foo
> -PASS: gdb.base/list.exp: list filename:function (2 tests)
> +FAIL: gdb.base/list.exp: list list1.c:unused
> +PASS: gdb.base/list.exp: list filename:function (1 tests)
> XFAIL: gdb.base/list.exp: list filename:function; wrong filename rejected
> PASS: gdb.base/list.exp: list filename:function; nonexistant file
> PASS: gdb.base/list.exp: list filename:function; nonexistant function
> PASS: gdb.base/list.exp: set listsize 4
> FAIL: gdb.base/list.exp: list long_line
> PASS: gdb.base/list.exp: search 4321
> -PASS: gdb.base/list.exp: search 6789
> +FAIL: gdb.base/list.exp: search 6789
> PASS: gdb.base/list.exp: search extremely long line (> 5000 chars)
> Running ../../../../src/src/gdb/testsuite/gdb.base/logical.exp ...
> PASS: gdb.base/logical.exp: set variable x=0
> @@ -3472,7 +3473,8 @@
> PASS: gdb.base/ptype.exp: ptype named enumeration
> PASS: gdb.base/ptype.exp: ptype unnamed typedef'd enumeration
> PASS: gdb.base/ptype.exp: list main
> -PASS: gdb.base/ptype.exp: whatis unnamed typedef'd enum (compiler bug in IBM's xlc)
> +ERROR: get_debug_format used when no current source file
> +UNRESOLVED: gdb.base/ptype.exp: whatis unnamed typedef'd enum (compiler bug in IBM's xlc)
> PASS: gdb.base/ptype.exp: printing typedef'd struct
> PASS: gdb.base/ptype.exp: printing typedef'd union
> PASS: gdb.base/ptype.exp: ptype named typedef'd enumf'd enum
> @@ -3490,14 +3492,15 @@
> PASS: gdb.base/ptype.exp: ptype nested structure #2
> PASS: gdb.base/ptype.exp: ptype inner int
> PASS: gdb.base/ptype.exp: ptype nested union
> -XFAIL: gdb.base/ptype.exp: ptype func_type (compiler doesn't emit prototyped types)
> +ERROR: get_debug_format used when no current source file
> +UNRESOLVED: gdb.base/ptype.exp: ptype func_type (compiler doesn't emit prototyped types)
> PASS: gdb.base/ptype.exp: ptype old_fptr
> -XFAIL: gdb.base/ptype.exp: ptype new_fptr (compiler doesn't emit prototyped types)
> -XFAIL: gdb.base/ptype.exp: ptype fptr (compiler doesn't emit prototyped types)
> -XFAIL: gdb.base/ptype.exp: ptype fptr2 (compiler doesn't emit prototyped types)
> -XFAIL: gdb.base/ptype.exp: ptype xptr (compiler doesn't emit prototyped types)
> -XFAIL: gdb.base/ptype.exp: ptype ffptr (compiler doesn't emit prototyped types)
> -XFAIL: gdb.base/ptype.exp: ptype fffptr (compiler doesn't emit prototyped types)
> +FAIL: gdb.base/ptype.exp: ptype new_fptr (compiler doesn't emit prototyped types)
> +FAIL: gdb.base/ptype.exp: ptype fptr (compiler doesn't emit prototyped types)
> +FAIL: gdb.base/ptype.exp: ptype fptr2 (compiler doesn't emit prototyped types)
> +FAIL: gdb.base/ptype.exp: ptype xptr (compiler doesn't emit prototyped types)
> +FAIL: gdb.base/ptype.exp: ptype ffptr (compiler doesn't emit prototyped types)
> +FAIL: gdb.base/ptype.exp: ptype fffptr (compiler doesn't emit prototyped types)
> PASS: gdb.base/ptype.exp: ptype "abc"
> PASS: gdb.base/ptype.exp: ptype {'a','b','c'}
> PASS: gdb.base/ptype.exp: ptype {0,1,2}
> @@ -4190,7 +4193,7 @@
> PASS: gdb.base/shlib-call.exp: step inside shr2 (shlib func)
> PASS: gdb.base/shlib-call.exp: step out of shr2 to main
> PASS: gdb.base/shlib-call.exp: print mainshr1(1)
> -PASS: gdb.base/shlib-call.exp: step into mainshr1
> +FAIL: gdb.base/shlib-call.exp: step into mainshr1
> PASS: gdb.base/shlib-call.exp: set bp in shared library
> PASS: gdb.base/shlib-call.exp: run to bp in shared library
> PASS: gdb.base/shlib-call.exp: cont
> @@ -4696,17 +4699,17 @@
> PASS: gdb.base/step-line.exp: next over dummy 1
> PASS: gdb.base/step-line.exp: next to dummy 2
> PASS: gdb.base/step-line.exp: next over dummy 2
> -PASS: gdb.base/step-line.exp: step into f2
> -PASS: gdb.base/step-line.exp: next over dummy 4
> -PASS: gdb.base/step-line.exp: next to dummy 5
> -PASS: gdb.base/step-line.exp: next to dummy 6
> -PASS: gdb.base/step-line.exp: next over dummy 6
> -PASS: gdb.base/step-line.exp: next to dummy 7
> -PASS: gdb.base/step-line.exp: next to dummy 8
> -PASS: gdb.base/step-line.exp: next over dummy 8
> -PASS: gdb.base/step-line.exp: next to dummy 9
> -PASS: gdb.base/step-line.exp: next to dummy 10
> -PASS: gdb.base/step-line.exp: next over dummy 10
> +FAIL: gdb.base/step-line.exp: step into f2
> +FAIL: gdb.base/step-line.exp: next over dummy 4
> +FAIL: gdb.base/step-line.exp: next to dummy 5
> +FAIL: gdb.base/step-line.exp: next to dummy 6
> +FAIL: gdb.base/step-line.exp: next over dummy 6
> +FAIL: gdb.base/step-line.exp: next to dummy 7
> +FAIL: gdb.base/step-line.exp: next to dummy 8
> +FAIL: gdb.base/step-line.exp: next over dummy 8
> +FAIL: gdb.base/step-line.exp: next to dummy 9
> +FAIL: gdb.base/step-line.exp: next to dummy 10
> +FAIL: gdb.base/step-line.exp: next over dummy 10
> Running ../../../../src/src/gdb/testsuite/gdb.base/step-test.exp ...
> PASS: gdb.base/step-test.exp: next 1
> PASS: gdb.base/step-test.exp: step 1
> @@ -4723,7 +4726,7 @@
> PASS: gdb.base/step-test.exp: nexti over function
> PASS: gdb.base/step-test.exp: set breakpoint at call to large_struct_by_value
> PASS: gdb.base/step-test.exp: run to pass large struct
> -PASS: gdb.base/step-test.exp: large struct by value
> +FAIL: gdb.base/step-test.exp: large struct by value
> PASS: gdb.base/step-test.exp: continue until exit at step-test.exp
> Running ../../../../src/src/gdb/testsuite/gdb.base/structs.exp ...
> PASS: gdb.base/structs.exp: set print sevenbit-strings
> @@ -6354,9 +6357,9 @@
> PASS: gdb.c++/overload.exp: print call overloaded func float arg
> PASS: gdb.c++/overload.exp: print call overloaded func double arg
> FAIL: gdb.c++/overload.exp: list overloaded function with no args
> -PASS: gdb.c++/overload.exp: list overloaded function with int arg
> -PASS: gdb.c++/overload.exp: list overloaded function with function ptr args
> -PASS: gdb.c++/overload.exp: list overloaded function with function ptr args - quotes around argument
> +FAIL: gdb.c++/overload.exp: list overloaded function with int arg
> +FAIL: gdb.c++/overload.exp: list overloaded function with function ptr args
> +FAIL: gdb.c++/overload.exp: list overloaded function with function ptr args - quotes around argument
> Running ../../../../src/src/gdb/testsuite/gdb.c++/ovldbreak.exp ...
> PASS: gdb.c++/ovldbreak.exp: bp menu for foo::overload1arg choice 12
> PASS: gdb.c++/ovldbreak.exp: set bp 2 on foo::overload1arg 12 line 111
> @@ -7108,9 +7111,9 @@
> PASS: gdb.mi/mi-simplerun.exp: list of breakpoints, 16 disabled
> PASS: gdb.mi/mi-simplerun.exp: run to main
> PASS: gdb.mi/mi-simplerun.exp: next at main
> -PASS: gdb.mi/mi-simplerun.exp: step at main
> -PASS: gdb.mi/mi-simplerun.exp: step to callee4
> -PASS: gdb.mi/mi-simplerun.exp: exec-finish
> +FAIL: gdb.mi/mi-simplerun.exp: step at main (unknown output after running)
> +FAIL: gdb.mi/mi-simplerun.exp: step to callee4 (unknown output after running)
> +FAIL: gdb.mi/mi-simplerun.exp: exec-finish (unknown output after running)
> PASS: gdb.mi/mi-simplerun.exp: continue to end
> Running ../../../../src/src/gdb/testsuite/gdb.mi/mi-stack.exp ...
> PASS: gdb.mi/mi-stack.exp: break-insert operation
> @@ -7638,9 +7641,9 @@
> PASS: gdb.mi/mi0-simplerun.exp: list of breakpoints, 16 disabled
> PASS: gdb.mi/mi0-simplerun.exp: run to main
> PASS: gdb.mi/mi0-simplerun.exp: next at main
> -PASS: gdb.mi/mi0-simplerun.exp: step at main
> -PASS: gdb.mi/mi0-simplerun.exp: step to callee4
> -PASS: gdb.mi/mi0-simplerun.exp: exec-finish
> +FAIL: gdb.mi/mi0-simplerun.exp: step at main (unknown output after running)
> +FAIL: gdb.mi/mi0-simplerun.exp: step to callee4 (unknown output after running)
> +FAIL: gdb.mi/mi0-simplerun.exp: exec-finish (unknown output after running)
> PASS: gdb.mi/mi0-simplerun.exp: continue to end
> Running ../../../../src/src/gdb/testsuite/gdb.mi/mi0-stack.exp ...
> PASS: gdb.mi/mi0-stack.exp: break-insert operation
> @@ -8239,11 +8242,11 @@
>
> === gdb Summary ===
>
> -# of expected passes 7561
> -# of unexpected failures 152
> +# of expected passes 7514
> +# of unexpected failures 195
> # of unexpected successes 12
> -# of expected failures 156
> -# of unresolved testcases 100
> +# of expected failures 149
> +# of unresolved testcases 112
> # of untested testcases 1
> # of unsupported tests 3
> /usr/home/kettenis/obj/gdb/gdb/testsuite/../../gdb/gdb version 2002-02-23-cvs -nx