From: Dmitry V. Levin Date: Thu, 16 Mar 2017 20:38:48 +0000 (+0000) Subject: tests: check decoding of int 0x80 on x86_64, x32, and x86 X-Git-Tag: v4.17~157 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8a29266d8ebcb5c95760aa1aaf34fdbf55c4b2f;p=strace tests: check decoding of int 0x80 on x86_64, x32, and x86 * tests/int_0x80.c: New file. * tests/int_0x80.test: New test. * tests/.gitignore: Add int_0x80. * tests/Makefile.am (check_PROGRAMS): Likewise. (MISC_TESTS, XFAIL_TESTS_x86_64, XFAIL_TESTS_x32): Add int_0x80.test. (XFAIL_TESTS): Add $(XFAIL_TESTS_$(ARCH)). (CLEANFILES): Add $(TESTS:=.tmp.out) and $(TESTS:=.tmp.exp). --- diff --git a/tests/.gitignore b/tests/.gitignore index a7754b6a..a1ed6d05 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -111,6 +111,7 @@ inet-cmsg init_module inotify inotify_init1 +int_0x80 ioctl ioctl_block ioctl_dm diff --git a/tests/Makefile.am b/tests/Makefile.am index c5c124c0..a75b7fca 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -174,6 +174,7 @@ check_PROGRAMS = \ init_module \ inotify \ inotify_init1 \ + int_0x80 \ ioctl \ ioctl_block \ ioctl_dm \ @@ -850,6 +851,7 @@ MISC_TESTS = \ detach-stopped.test \ filter-unavailable.test \ fork-f.test \ + int_0x80.test \ ksysent.test \ opipe.test \ options-syntax.test \ @@ -885,7 +887,9 @@ TESTS = $(DECODER_TESTS) $(MISC_TESTS) $(LIBUNWIND_TESTS) XFAIL_TESTS_ = XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS) XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS) -XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) +XFAIL_TESTS_x86_64 = int_0x80.test +XFAIL_TESTS_x32 = int_0x80.test +XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH)) TEST_LOG_COMPILER = env AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh @@ -962,6 +966,6 @@ ksysent.$(OBJEXT): ksysent.h objects = $(filter %.$(OBJEXT),$(SOURCES:.c=.$(OBJEXT))) $(objects): scno.h -CLEANFILES = ksysent.h $(TESTS:=.tmp) +CLEANFILES = ksysent.h $(TESTS:=.tmp) $(TESTS:=.tmp.out) $(TESTS:=.tmp.exp) include ../scno.am diff --git a/tests/int_0x80.c b/tests/int_0x80.c new file mode 100644 index 00000000..012694fd --- /dev/null +++ b/tests/int_0x80.c @@ -0,0 +1,52 @@ +/* + * Check decoding of int 0x80 on x86_64, x32, and x86. + * + * Copyright (c) 2017 Dmitry V. Levin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "tests.h" + +#if defined __x86_64__ || defined __i386__ + +# include +# include + +int +main(void) +{ + /* 200 is __NR_getgid32 on x86 and __NR_tkill on x86_64. */ + __asm__("movl $200, %eax; int $0x80"); + printf("getgid32() = %d\n", getegid()); + + puts("+++ exited with 0 +++"); + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__x86_64__ || __i386__") + +#endif diff --git a/tests/int_0x80.test b/tests/int_0x80.test new file mode 100755 index 00000000..b198a591 --- /dev/null +++ b/tests/int_0x80.test @@ -0,0 +1,6 @@ +#!/bin/sh + +# Check decoding of int 0x80 on x86_64, x32, and x86. +. "${srcdir=.}/init.sh" + +run_strace_match_diff -a11 -e trace=getgid32