mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-05 08:14:19 +08:00
2004-06-16 Andrew Cagney <cagney@gnu.org>
* gdb.base/signull.c: Update copyright. Include <string.h>. (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.
This commit is contained in:
parent
acd4ad442c
commit
9d9030bc8f
@ -1,3 +1,14 @@
|
||||
2004-06-16 Andrew Cagney <cagney@gnu.org>
|
||||
|
||||
* gdb.base/signull.c: Update copyright. Include <string.h>.
|
||||
(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 <cagney@gnu.org>
|
||||
|
||||
* gdb.base/long_long.exp, gdb.base/long_long.c: Rewrite.
|
||||
|
@ -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 <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
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) ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user