diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-02-03 16:27:57 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-02-03 16:27:57 +0000 |
commit | 0f1b18abb46844c01accf8cd0a698ea419fb3ee6 (patch) | |
tree | 3a0b621b985818944bd3123a3b3bff732a0f3a20 /gdb/contrib | |
parent | 233d95b548ec948c4a6d01cd05c307385dd615fb (diff) | |
download | gdb-0f1b18abb46844c01accf8cd0a698ea419fb3ee6.zip gdb-0f1b18abb46844c01accf8cd0a698ea419fb3ee6.tar.gz gdb-0f1b18abb46844c01accf8cd0a698ea419fb3ee6.tar.bz2 |
gdb/
* contrib/expect-read1.c: New file.
* contrib/expect-read1.sh: New file.
Diffstat (limited to 'gdb/contrib')
-rw-r--r-- | gdb/contrib/expect-read1.c | 40 | ||||
-rw-r--r-- | gdb/contrib/expect-read1.sh | 42 |
2 files changed, 82 insertions, 0 deletions
diff --git a/gdb/contrib/expect-read1.c b/gdb/contrib/expect-read1.c new file mode 100644 index 0000000..963c1ff --- /dev/null +++ b/gdb/contrib/expect-read1.c @@ -0,0 +1,40 @@ +/* Copyright (C) 2013 Free Software Foundation, Inc. + + This file is part of GDB. + + 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 + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* RTLD_NEXT requires _GNU_SOURCE. */ +#define _GNU_SOURCE 1 +#include <dlfcn.h> +#include <unistd.h> +#include <fcntl.h> +#include <stdlib.h> + +ssize_t +read (int fd, void *buf, size_t count) +{ + static ssize_t (*read2) (int fd, void *buf, size_t count) = NULL; + + if (read2 == NULL) + { + unsetenv ("LD_PRELOAD"); + read2 = dlsym (RTLD_NEXT, "read"); + } + + if (count > 1 && isatty (fd) == 1) + count = 1; + + return read2 (fd, buf, count); +} diff --git a/gdb/contrib/expect-read1.sh b/gdb/contrib/expect-read1.sh new file mode 100644 index 0000000..ad32520 --- /dev/null +++ b/gdb/contrib/expect-read1.sh @@ -0,0 +1,42 @@ +#! /bin/sh +# runtest wrapper to reliably reproduce racy incomplete reads in the testsuite. + +# Copyright (C) 2013 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 +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This tool excercise any incomplete reads handling in the testsuite by +# simulating read always returns just 1 character. +# Testsuite incompatibilities are tracked as GDB PR testsuite/12649. + +# Example usage: +# +# bash$ cd $objdir/gdb/testsuite +# bash$ EXPECT=$srcdir/gdb/contrib/expect-read1.sh runtest +# or +# bash$ EXPECT=../contrib/expect-read1.sh runtest + +C=`echo $0|sed 's/\.sh$/.c/'` +if ! test -e $C; then + echo >&2 "$0: Cannot find 'srcdir/gdb/contrib/expect-read1.c' at '$C'." + exit 2 +fi +SO=/tmp/expect-read1.$$.so +rm -f $SO +CMD="${CC_FOR_TARGET:-gcc} -o $SO -Wall -fPIC -shared $C" +if ! $CMD; then + echo >&2 "$0: Failed: $CMD" + exit 2 +fi +trap "rm -f $SO" EXIT +LD_PRELOAD=$SO expect "$@" |