From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4434 invoked by alias); 16 Jun 2004 14:54:38 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 4205 invoked from network); 16 Jun 2004 14:54:37 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sourceware.org with SMTP; 16 Jun 2004 14:54:37 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.10/8.12.10) with ESMTP id i5GEsXe3011636 for ; Wed, 16 Jun 2004 10:54:33 -0400 Received: from localhost.redhat.com (porkchop.devel.redhat.com [172.16.58.2]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i5GEsW013094; Wed, 16 Jun 2004 10:54:32 -0400 Received: from gnu.org (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 780E92B9D; Wed, 16 Jun 2004 10:54:19 -0400 (EDT) Message-ID: <40D05F1B.6090609@gnu.org> Date: Wed, 16 Jun 2004 14:54:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-GB; rv:1.4.1) Gecko/20040217 MIME-Version: 1.0 To: Michael Elizabeth Chastain Cc: gdb-patches@sources.redhat.com Subject: Re: [rfa/testsuite] Extend signull to work with discriptors References: <20040616050213.94BCC4B104@berman.michael-chastain.com> In-Reply-To: <20040616050213.94BCC4B104@berman.michael-chastain.com> Content-Type: multipart/mixed; boundary="------------080308090607080104030001" X-SW-Source: 2004-06/txt/msg00372.txt.bz2 This is a multi-part message in MIME format. --------------080308090607080104030001 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1631 > Needs more work: > > - copyright year 2004 in signull.c > > - did you test it on ia64 and/or ppc? > can't quite tell from your wording yep, and also tested on fc2 i386. > - this code has ISO problems. That's to put it mildly. The trick it's pulling with function descriptors isn't valid ISO-C (but by knowing how descriptors work does lead to predictable behavior ... :-) We're going to have to live with this - the testsuite needs to include deliberately erroneous programs. > % cat ptr.c > typedef long data_t; > typedef long code_t (void); > volatile data_t zero[10]; > volatile code_t *desc = (void *) zero; > > % gcc-340 -Wall -S -pedantic -std=iso9899:1990 ptr.c > ptr.c:4: warning: ISO C forbids qualified function types > ptr.c:4: warning: ISO C forbids initialization between function pointer and `void *' > > What about: > > code_t * volatile desc = 0; > But that's semantically different from what you wrote. Hmmm. I don't > think it's possible in ISO C to initialize a pointer-to-code with the > address of a data object. Any ideas? This: code_t *volatile desc = (code_t *) (void *) zero; does appear to fool the compiler. see attched, Andrew > === > > 2004-06-15 Andrew Cagney > > * gdb.base/signull.c (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. > --------------080308090607080104030001 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 3618 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. Index: gdb.base/signull.c =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/signull.c,v retrieving revision 1.3 diff -p -u -r1.3 signull.c --- gdb.base/signull.c 22 May 2004 13:14:22 -0000 1.3 +++ gdb.base/signull.c 16 Jun 2004 14:44:19 -0000 @@ -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,10 @@ 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; +data_t zero[10]; +code_t *volatile desc = (code_t *) (void *) zero; sigjmp_buf env; @@ -47,12 +50,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) (); } } Index: gdb.base/signull.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/signull.exp,v retrieving revision 1.1 diff -p -u -r1.1 signull.exp --- gdb.base/signull.exp 13 May 2004 18:12:07 -0000 1.1 +++ gdb.base/signull.exp 16 Jun 2004 14:44:19 -0000 @@ -79,7 +79,7 @@ gdb_test "set test = code_entry_point" " 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 b 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 \ --------------080308090607080104030001--