From patchwork Wed Jun 21 12:26:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xose Vazquez Perez X-Patchwork-Id: 9801723 X-Patchwork-Delegate: snitzer@redhat.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E86D36038C for ; Wed, 21 Jun 2017 12:27:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CB1BA27F10 for ; Wed, 21 Jun 2017 12:27:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BFA6E285B6; Wed, 21 Jun 2017 12:27:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2BC2627F10 for ; Wed, 21 Jun 2017 12:27:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7E3DBC0587D4; Wed, 21 Jun 2017 12:27:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 7E3DBC0587D4 Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dm-devel-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 7E3DBC0587D4 Authentication-Results: mx1.redhat.com; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GzIWzoHv" Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id ECBBE7E2EB; Wed, 21 Jun 2017 12:27:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 0E33B6EF58; Wed, 21 Jun 2017 12:27:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v5LCQqbw010800 for ; Wed, 21 Jun 2017 08:26:52 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5F272702F1; Wed, 21 Jun 2017 12:26:52 +0000 (UTC) Delivered-To: dm-devel@redhat.com Received: from mx1.redhat.com (ext-mx04.extmail.prod.ext.phx2.redhat.com [10.5.110.28]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 41E7D7F77B for ; Wed, 21 Jun 2017 12:26:47 +0000 (UTC) Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C90937F7A9 for ; Wed, 21 Jun 2017 12:26:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C90937F7A9 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=xose.vazquez@gmail.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com C90937F7A9 Received: by mail-wr0-f194.google.com with SMTP id y25so23894238wrd.1 for ; Wed, 21 Jun 2017 05:26:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=VS+yU+H9DdB6+XdwTT088ilXKqlvr8aXeB+I4oVUk20=; b=GzIWzoHvdxx1E4NAJScZsQDe/H1Tz4L4zwo/OQD8MVYhxLs/+qroM4yTlD2M8YpZnY uuisF064OrNRa7WKAiScPN6WE7Sz7N6wutCBS1079UILB3YHLsqS/Zyzha3+f0W3vDgX kLgt5K9vf2EBwjSb/xW8yHeGRRI2R0ILcCYkwsCjntx8ogua5dwteuwMkj92NKooTGxo 1UcIKmSpg2/n7gKNPjJtugAtCksLm/Gy2nsSKZr6vPX2ru9DkhGqDh0ibtWofLHISV1h NSR+Dl6H5ZPMhuiakst2H9KJLQH0FxrxP+GF40kWlDtsZoY3n/c4H5i5M2RqsHJ4cUdH xMOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=VS+yU+H9DdB6+XdwTT088ilXKqlvr8aXeB+I4oVUk20=; b=WLuVWLXE3h+XNdxTLe9BUQ8H+oBZWv3U/mcvvB1uYzSUphM4ZflVNnyFjDh2uZTR/b 52mUTJZvQwW/aqzdUwV0+0dGVBWMiQPOfVoWrl8eNbGZg3hGsWD1wull0goG306PDS0T TiqUEag6va45uwwZprYicHlkyAJZmFJR0muxF2huKyXpmjOSWF9OWbGCqZZjBSl0Fj8Y +nxszdIDJ+EjTRLTt8iUhd2SZWE7v9aYtlwKsv03qWzNOSoUVgOa382JC95b/DgB52ex VpSeYq6s5L5kcCaiYXC9k3yYYZ066hgKjUmgumFf15Fo1vfpubwadDFx3O4F3F6fsAeF TZ1A== X-Gm-Message-State: AKS2vOyCyeLE1Ycdt2zPCjFvWnMM+/QpCqk1NQZUs3w8xuWkpeKav+Cl /L9kC+pCEjnwp5kgi6g= X-Received: by 10.223.142.202 with SMTP id q68mr13928505wrb.13.1498048003054; Wed, 21 Jun 2017 05:26:43 -0700 (PDT) Received: from localhost ([46.222.219.177]) by smtp.gmail.com with ESMTPSA id f21sm23830369wra.5.2017.06.21.05.26.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 21 Jun 2017 05:26:41 -0700 (PDT) From: Xose Vazquez Perez To: Date: Wed, 21 Jun 2017 14:26:39 +0200 Message-Id: <20170621122639.6027-1-xose.vazquez@gmail.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 21 Jun 2017 12:26:45 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 21 Jun 2017 12:26:45 +0000 (UTC) for IP:'209.85.128.194' DOMAIN:'mail-wr0-f194.google.com' HELO:'mail-wr0-f194.google.com' FROM:'xose.vazquez@gmail.com' RCPT:'' X-RedHat-Spam-Score: -0.31 (BAYES_50, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_PASS) 209.85.128.194 mail-wr0-f194.google.com 209.85.128.194 mail-wr0-f194.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.28 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: dm-devel@redhat.com Cc: Bart Van Assche , device-mapper development , Xose Vazquez Perez Subject: [dm-devel] [PATCH] multipath-tools: sync third-party headers with 3.13 upstream X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Wed, 21 Jun 2017 12:27:36 +0000 (UTC) X-Virus-Scanned: ClamAV using ClamSMTP Cc: Bart Van Assche Cc: Christophe Varoqui Cc: device-mapper development Signed-off-by: Xose Vazquez Perez Reviewed-by: Bart Van Assche --- third-party/valgrind/drd.h | 2 +- third-party/valgrind/valgrind.h | 556 ++-------------------------------------- 2 files changed, 21 insertions(+), 537 deletions(-) diff --git a/third-party/valgrind/drd.h b/third-party/valgrind/drd.h index 4615e5b..d63b3dd 100644 --- a/third-party/valgrind/drd.h +++ b/third-party/valgrind/drd.h @@ -12,7 +12,7 @@ This file is part of DRD, a Valgrind tool for verification of multithreaded programs. - Copyright (C) 2006-2015 Bart Van Assche . + Copyright (C) 2006-2017 Bart Van Assche . All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/third-party/valgrind/valgrind.h b/third-party/valgrind/valgrind.h index 6892007..5aed0df 100644 --- a/third-party/valgrind/valgrind.h +++ b/third-party/valgrind/valgrind.h @@ -12,7 +12,7 @@ This file is part of Valgrind, a dynamic binary instrumentation framework. - Copyright (C) 2000-2015 Julian Seward. All rights reserved. + Copyright (C) 2000-2017 Julian Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions @@ -89,7 +89,7 @@ || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6)) */ #define __VALGRIND_MAJOR__ 3 -#define __VALGRIND_MINOR__ 12 +#define __VALGRIND_MINOR__ 13 #include @@ -122,7 +122,6 @@ #undef PLAT_s390x_linux #undef PLAT_mips32_linux #undef PLAT_mips64_linux -#undef PLAT_tilegx_linux #undef PLAT_x86_solaris #undef PLAT_amd64_solaris @@ -160,8 +159,6 @@ # define PLAT_mips64_linux 1 #elif defined(__linux__) && defined(__mips__) && (__mips!=64) # define PLAT_mips32_linux 1 -#elif defined(__linux__) && defined(__tilegx__) -# define PLAT_tilegx_linux 1 #elif defined(__sun) && defined(__i386__) # define PLAT_x86_solaris 1 #elif defined(__sun) && defined(__x86_64__) @@ -1048,73 +1045,6 @@ typedef #endif /* PLAT_mips64_linux */ -/* ------------------------ tilegx-linux --------------- */ -#if defined(PLAT_tilegx_linux) - -typedef - struct { - unsigned long long int nraddr; /* where's the code? */ - } - OrigFn; -/*** special instruction sequence. - 0:02b3c7ff91234fff { moveli zero, 4660 ; moveli zero, 22136 } - 8:0091a7ff95678fff { moveli zero, 22136 ; moveli zero, 4660 } -****/ - -#define __SPECIAL_INSTRUCTION_PREAMBLE \ - ".quad 0x02b3c7ff91234fff\n" \ - ".quad 0x0091a7ff95678fff\n" - -#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ - _zzq_default, _zzq_request, \ - _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ - ({ volatile unsigned long long int _zzq_args[6]; \ - volatile unsigned long long int _zzq_result; \ - _zzq_args[0] = (unsigned long long int)(_zzq_request); \ - _zzq_args[1] = (unsigned long long int)(_zzq_arg1); \ - _zzq_args[2] = (unsigned long long int)(_zzq_arg2); \ - _zzq_args[3] = (unsigned long long int)(_zzq_arg3); \ - _zzq_args[4] = (unsigned long long int)(_zzq_arg4); \ - _zzq_args[5] = (unsigned long long int)(_zzq_arg5); \ - __asm__ volatile("move r11, %1\n\t" /*default*/ \ - "move r12, %2\n\t" /*ptr*/ \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - /* r11 = client_request */ \ - "or r13, r13, r13\n\t" \ - "move %0, r11\n\t" /*result*/ \ - : "=r" (_zzq_result) \ - : "r" (_zzq_default), "r" (&_zzq_args[0]) \ - : "memory", "r11", "r12"); \ - _zzq_result; \ - }) - -#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ - { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ - volatile unsigned long long int __addr; \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - /* r11 = guest_NRADDR */ \ - "or r14, r14, r14\n" \ - "move %0, r11\n" \ - : "=r" (__addr) \ - : \ - : "memory", "r11" \ - ); \ - _zzq_orig->nraddr = __addr; \ - } - -#define VALGRIND_CALL_NOREDIR_R12 \ - __SPECIAL_INSTRUCTION_PREAMBLE \ - "or r15, r15, r15\n\t" - -#define VALGRIND_VEX_INJECT_IR() \ - do { \ - __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ - "or r11, r11, r11\n\t" \ - ); \ - } while (0) - -#endif /* PLAT_tilegx_linux */ - /* Insert assembly code for other platforms here... */ #endif /* NVALGRIND */ @@ -2708,7 +2638,7 @@ typedef #define __CALLER_SAVED_REGS \ "lr", "ctr", "xer", \ "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ - "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ "r11", "r12", "r13" /* Macros to save and align the stack before making a function @@ -3264,7 +3194,7 @@ typedef #define __CALLER_SAVED_REGS \ "lr", "ctr", "xer", \ "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ - "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ "r11", "r12", "r13" /* Macros to save and align the stack before making a function @@ -6165,461 +6095,6 @@ typedef #endif /* PLAT_mips64_linux */ -/* ------------------------ tilegx-linux ------------------------- */ - -#if defined(PLAT_tilegx_linux) - -/* These regs are trashed by the hidden call. */ -#define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3", "r4", "r5", \ - "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", \ - "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", \ - "r23", "r24", "r25", "r26", "r27", "r28", "r29", "lr" - -/* These CALL_FN_ macros assume that on tilegx-linux, sizeof(unsigned - long) == 8. */ - -#define CALL_FN_W_v(lval, orig) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[1]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "ld r12, %1 \n\t" /* target->r11 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0 \n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_W(lval, orig, arg1) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[2]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[3]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[4]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8 \n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[5]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[6]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) -#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[7]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - "ld_add r5, r29, 8 \n\t" /*arg6 -> r5 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[8]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - "ld_add r5, r29, 8 \n\t" /*arg6 -> r5 */ \ - "ld_add r6, r29, 8 \n\t" /*arg7 -> r6 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[9]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - "ld_add r5, r29, 8 \n\t" /*arg6 -> r5 */ \ - "ld_add r6, r29, 8 \n\t" /*arg7 -> r6 */ \ - "ld_add r7, r29, 8 \n\t" /*arg8 -> r7 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[10]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - "ld_add r5, r29, 8 \n\t" /*arg6 -> r5 */ \ - "ld_add r6, r29, 8 \n\t" /*arg7 -> r6 */ \ - "ld_add r7, r29, 8 \n\t" /*arg8 -> r7 */ \ - "ld_add r8, r29, 8 \n\t" /*arg9 -> r8 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ - arg7,arg8,arg9,arg10) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[11]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - "ld_add r5, r29, 8 \n\t" /*arg6 -> r5 */ \ - "ld_add r6, r29, 8 \n\t" /*arg7 -> r6 */ \ - "ld_add r7, r29, 8 \n\t" /*arg8 -> r7 */ \ - "ld_add r8, r29, 8 \n\t" /*arg9 -> r8 */ \ - "ld_add r9, r29, 8 \n\t" /*arg10 -> r9 */ \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 8\n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ - arg6,arg7,arg8,arg9,arg10, \ - arg11) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[12]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - "ld_add r5, r29, 8 \n\t" /*arg6 -> r5 */ \ - "ld_add r6, r29, 8 \n\t" /*arg7 -> r6 */ \ - "ld_add r7, r29, 8 \n\t" /*arg8 -> r7 */ \ - "ld_add r8, r29, 8 \n\t" /*arg9 -> r8 */ \ - "ld_add r9, r29, 8 \n\t" /*arg10 -> r9 */ \ - "ld r10, r29 \n\t" \ - "st_add sp, r10, -16 \n\t" \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 24 \n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) - -#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ - arg6,arg7,arg8,arg9,arg10, \ - arg11,arg12) \ - do { \ - volatile OrigFn _orig = (orig); \ - volatile unsigned long _argvec[13]; \ - volatile unsigned long _res; \ - _argvec[0] = (unsigned long)_orig.nraddr; \ - _argvec[1] = (unsigned long)(arg1); \ - _argvec[2] = (unsigned long)(arg2); \ - _argvec[3] = (unsigned long)(arg3); \ - _argvec[4] = (unsigned long)(arg4); \ - _argvec[5] = (unsigned long)(arg5); \ - _argvec[6] = (unsigned long)(arg6); \ - _argvec[7] = (unsigned long)(arg7); \ - _argvec[8] = (unsigned long)(arg8); \ - _argvec[9] = (unsigned long)(arg9); \ - _argvec[10] = (unsigned long)(arg10); \ - _argvec[11] = (unsigned long)(arg11); \ - _argvec[12] = (unsigned long)(arg12); \ - __asm__ volatile( \ - "addi sp, sp, -8 \n\t" \ - "st_add sp, lr, -8 \n\t" \ - "move r29, %1 \n\t" \ - "ld_add r12, r29, 8 \n\t" /* target->r11 */ \ - "ld_add r0, r29, 8 \n\t" /*arg1 -> r0 */ \ - "ld_add r1, r29, 8 \n\t" /*arg2 -> r1 */ \ - "ld_add r2, r29, 8 \n\t" /*arg3 -> r2 */ \ - "ld_add r3, r29, 8 \n\t" /*arg4 -> r3 */ \ - "ld_add r4, r29, 8 \n\t" /*arg5 -> r4 */ \ - "ld_add r5, r29, 8 \n\t" /*arg6 -> r5 */ \ - "ld_add r6, r29, 8 \n\t" /*arg7 -> r6 */ \ - "ld_add r7, r29, 8 \n\t" /*arg8 -> r7 */ \ - "ld_add r8, r29, 8 \n\t" /*arg9 -> r8 */ \ - "ld_add r9, r29, 8 \n\t" /*arg10 -> r9 */ \ - "addi r28, sp, -8 \n\t" \ - "addi sp, sp, -24 \n\t" \ - "ld_add r10, r29, 8 \n\t" \ - "ld r11, r29 \n\t" \ - "st_add r28, r10, 8 \n\t" \ - "st r28, r11 \n\t" \ - VALGRIND_CALL_NOREDIR_R12 \ - "addi sp, sp, 32 \n\t" \ - "ld_add lr, sp, 8 \n\t" \ - "move %0, r0\n" \ - : /*out*/ "=r" (_res) \ - : /*in*/ "r" (&_argvec[0]) \ - : /*trash*/ "memory", __CALLER_SAVED_REGS); \ - lval = (__typeof__(lval)) _res; \ - } while (0) -#endif /* PLAT_tilegx_linux */ - /* ------------------------------------------------------------------ */ /* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ /* */ @@ -6642,8 +6117,9 @@ typedef /* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! This enum comprises an ABI exported by Valgrind to programs - which use client requests. DO NOT CHANGE THE ORDER OF THESE - ENTRIES, NOR DELETE ANY -- add new ones at the end. */ + which use client requests. DO NOT CHANGE THE NUMERIC VALUES OF THESE + ENTRIES, NOR DELETE ANY -- add new ones at the end of the most + relevant group. */ typedef enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001, VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002, @@ -6713,8 +6189,13 @@ typedef Other values are not allowed. */ VG_USERREQ__CHANGE_ERR_DISABLEMENT = 0x1801, + /* Some requests used for Valgrind internal, such as + self-test or self-hosting. */ /* Initialise IR injection */ - VG_USERREQ__VEX_INIT_FOR_IRI = 0x1901 + VG_USERREQ__VEX_INIT_FOR_IRI = 0x1901, + /* Used by Inner Valgrind to inform Outer Valgrind where to + find the list of inner guest threads */ + VG_USERREQ__INNER_THREADS = 0x1902 } Vg_ClientRequest; #if !defined(__GNUC__) @@ -6740,6 +6221,10 @@ typedef VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS, \ _qzz_addr, _qzz_len, 0, 0, 0) +#define VALGRIND_INNER_THREADS(_qzz_addr) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__INNER_THREADS, \ + _qzz_addr, 0, 0, 0, 0) + /* These requests are for getting Valgrind itself to print something. Possibly with a backtrace. This is a really ugly hack. The return value @@ -6759,7 +6244,7 @@ __inline VALGRIND_PRINTF(const char *format, ...) { #if defined(NVALGRIND) - if (format) *(volatile const char *)format; /* avoid compiler warning */ + (void)format; return 0; #else /* NVALGRIND */ #if defined(_MSC_VER) || defined(__MINGW64__) @@ -6798,7 +6283,7 @@ __inline VALGRIND_PRINTF_BACKTRACE(const char *format, ...) { #if defined(NVALGRIND) - if (format) *(volatile const char *)format; /* avoid compiler warning */ + (void)format; return 0; #else /* NVALGRIND */ #if defined(_MSC_VER) || defined(__MINGW64__) @@ -6828,7 +6313,7 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...) /* These requests allow control to move from the simulated CPU to the - real CPU, calling an arbitary function. + real CPU, calling an arbitrary function. Note that the current ThreadId is inserted as the first argument. So this call: @@ -7153,7 +6638,6 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...) #undef PLAT_s390x_linux #undef PLAT_mips32_linux #undef PLAT_mips64_linux -#undef PLAT_tilegx_linux #undef PLAT_x86_solaris #undef PLAT_amd64_solaris