From 9d9030bc8f2fa4beddf67cd72a9d502155e40376 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Wed, 16 Jun 2004 16:40:51 +0000 Subject: [PATCH] 2004-06-16 Andrew Cagney * gdb.base/signull.c: Update copyright. Include . (bowler): Replace data_pointer with data_read and data_write cases. Add code_descriptor case. (zero, desc): New array and pointer. (data, code): Change to simple pointers. * gdb.base/signull.exp: Fix probe pattern matching a function descriptor SIGSEGV. Replace data_pointer with data_read and data_write tests. --- gdb/testsuite/ChangeLog | 11 +++++++++++ gdb/testsuite/gdb.base/signull.c | 30 ++++++++++++++++++++++-------- gdb/testsuite/gdb.base/signull.exp | 7 +++++-- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 349ac479c78..cbded93b6ef 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2004-06-16 Andrew Cagney + + * gdb.base/signull.c: Update copyright. Include . + (bowler): Replace data_pointer with data_read + and data_write cases. Add code_descriptor case. + (zero, desc): New array and pointer. + (data, code): Change to simple pointers. + * gdb.base/signull.exp: Fix probe pattern matching a function + descriptor SIGSEGV. Replace data_pointer with data_read and + data_write tests. + 2004-06-16 Andrew Cagney * gdb.base/long_long.exp, gdb.base/long_long.c: Rewrite. diff --git a/gdb/testsuite/gdb.base/signull.c b/gdb/testsuite/gdb.base/signull.c index dd77bbdec08..4139d14640e 100644 --- a/gdb/testsuite/gdb.base/signull.c +++ b/gdb/testsuite/gdb.base/signull.c @@ -1,6 +1,6 @@ /* This testcase is part of GDB, the GNU debugger. - Copyright 1996, 1999, 2003 Free Software Foundation, Inc. + Copyright 1996, 1999, 2003, 2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,9 +20,10 @@ #include #include #include +#include enum tests { - code_entry_point, code_descriptor, data_pointer + code_entry_point, code_descriptor, data_read, data_write }; static volatile enum tests test; @@ -31,8 +32,12 @@ static volatile enum tests test; typedef long data_t; typedef long code_t (void); -static volatile data_t *data[10]; -static volatile code_t *code[10]; +data_t *volatile data; +code_t *volatile code; +/* "desc" is intentionally initialized to a data object. This is + needed to test function descriptors on arches like ia64. */ +data_t zero[10]; +code_t *volatile desc = (code_t *) (void *) zero; sigjmp_buf env; @@ -47,12 +52,21 @@ bowler (void) { switch (test) { - case data_pointer: - return *data[0]; + case data_read: + /* Try to read address zero. */ + return (*data); + case data_write: + /* Try to write (the assignment) to address zero. */ + return (*data) = 1; case code_entry_point: - return code[0] (); + /* For typical architectures, call a function at address + zero. */ + return (*code) (); case code_descriptor: - return ((code_t *) &code) (); + /* For atypical architectures that use function descriptors, + call a function descriptor, the code field of which is zero + (which has the effect of jumping to address zero). */ + return (*desc) (); } } diff --git a/gdb/testsuite/gdb.base/signull.exp b/gdb/testsuite/gdb.base/signull.exp index 78cbdafa055..8dc91640cd2 100644 --- a/gdb/testsuite/gdb.base/signull.exp +++ b/gdb/testsuite/gdb.base/signull.exp @@ -79,7 +79,7 @@ gdb_test "set test = code_entry_point" "" "set for function pointer probe" set test "probe function pointer" set function_pointer code_entry_point gdb_test_multiple "continue" "$test" { - -re "Program received signal SIGSEGV.* bowler .$gdb_prompt $" { + -re "Program received signal SIGSEGV.*bowler .*$gdb_prompt $" { set function_pointer code_descriptor pass "$test (function descriptor)" } @@ -109,7 +109,10 @@ proc test_segv { name tag bt_from_segv bt_from_keeper } { gdb_test backtrace $bt_from_keeper "backtrace keeper for ${name}" } -test_segv data data_pointer \ +test_segv data-read data_read \ + {#0 .* bowler .*#1 .* main .*} \ + {#0 .* keeper .*#1 .* handler .*#2 .* bowler .*#3 .* main .*} +test_segv data-write data_write \ {#0 .* bowler .*#1 .* main .*} \ {#0 .* keeper .*#1 .* handler .*#2 .* bowler .*#3 .* main .*} test_segv code $function_pointer \ -- 2.30.2