This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] Accept compiler internal use of memcpy/bcopy for structs


For cases where the compiler uses memcpy/bcopy to copy structs around,
and those calls are found in a library for which debugging line number
information is available, attempting to step into a function where a
large struct is passed by value will first stop at the memcpy/bcopy
call that the compiler calls prior to the user function.

The comment in step-test.exp says that "opinion is bitterly divided
about whether this is the right behavior for GDB or not".  Regardless
of which opinion you have, you would probably have to agree that gdb
is currently behaving as designed, in the absence of additional
code to not stop in functions used internally by the compiler.  Thus
I believe the correct behavior of the test suite is to accept the
cases where gdb stops in memcpy/bcopy.

Here is a patch to fix the testsuite.

-Fred



2002-01-08  Fred Fish  <fnf@redhat.com>

	* gdb.base/step-test.exp: Accept stopping in memcpy/bcopy when we
	have debugging info for those functions and the compiler uses them
	internally to copy structs around.

Index: gdb.base/step-test.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/step-test.exp,v
retrieving revision 1.3
diff -c -p -r1.3 step-test.exp
*** step-test.exp	2001/03/06 08:21:51	1.3
--- step-test.exp	2002/01/08 16:51:30
*************** gdb_test \
*** 212,220 ****
  gdb_test "continue" \
           ".*Breakpoint ${decimal},.*large_struct_by_value.*" \
  	 "run to pass large struct"
! gdb_test "step" \
!          ".*step-test.exp: arrive here 1.*" \
!          "large struct by value"
  
  gdb_continue_to_end "step-test.exp"
  
--- 212,244 ----
  gdb_test "continue" \
           ".*Breakpoint ${decimal},.*large_struct_by_value.*" \
  	 "run to pass large struct"
! send_gdb "step\n"
! gdb_expect {
!     -re ".*step-test.exp: arrive here 1.*$gdb_prompt $" {
! 	pass "large struct by value"
!     }
!     -re ".*(memcpy|bcopy).*$gdb_prompt $" {
! 	send_gdb "finish\n" ; gdb_expect -re "$gdb_prompt $"
! 	send_gdb "step\n"
! 	gdb_expect {
! 	    -re ".*step-test.exp: arrive here 1.*$gdb_prompt $" {
! 		pass "large struct by value"
! 	    }
! 	    -re ".*$gdb_prompt $" {
! 		fail "large struct by value"
! 	    }
! 	    timeout {
! 		fail "large struct by value (timeout)"
! 	    }
! 	}
!     }
!     -re ".*$gdb_prompt $" {
! 	fail "large struct by value"
!     }
!     timeout {
! 	fail "large struct by value (timeout)"
!     }
! }
  
  gdb_continue_to_end "step-test.exp"
  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]