From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by sourceware.org (Postfix) with ESMTPS id 0AF843858C50 for ; Mon, 17 Apr 2023 22:35:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0AF843858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-94a39f6e8caso635871766b.0 for ; Mon, 17 Apr 2023 15:35:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681770954; x=1684362954; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=VlVkBJBF+YjR6Pdx1bhGBIOIV/QZhW1NedqyPj97Gzo=; b=sOEu6cWAqiEu+OqXi1ap79hbtOooPGX2uK3vE5XpmIPKmTujhl3+38i0iHT8LzSMcN N6dLb4v3dolZ4aO0pFNzSGuGHCI95xYTGQXDj3Tu0cwHRRJXbJVuVWeP3CeJGytg0dp8 ryX9R9cT6zV53V00sPbL0VCfW6uyoEbZ56ZBcSYEohC6HhifC5ZmovaLv5yW/olN+46c CYJeLGl+iDh8ZsO1BtQvmIpJDY/YkiMZMwK2AS6sGocv53JI8ca/9t3BAHh2lOFWvX/v MAiwKCEPsxeNxJ8KlVEDsGKNbdKw6vAGutRhhfXpwU6gir/3yXsOlKfdF2vrM0I1IdqJ 7DMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681770954; x=1684362954; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=VlVkBJBF+YjR6Pdx1bhGBIOIV/QZhW1NedqyPj97Gzo=; b=ii/aIwzZlUTD8CLOhsBvn8fJvmyXIFPxs0lXC9QIQ/u0O6/dLmRmQ8Y9vQUZWboLJ+ vC2cweHMTF/bNqocwRc9FgNoLHC3McnJKWOFm9qg/VmjnIwwc2Bire1/ceYLNBru7f2C Z8bqsVMfOZ+VwmmCUy3rIFxlKLSVP9DA7Xz6ghkoKN3wOcpCeTYUoPQxss5tbfVfjMFh b7XZJTsyxtng8aT2IApwfIDxHBYTECpZPm4GGlsYYtjbVLR3jwZ72XUdw0VifvV2eRd5 yzEjn75XLoie6o/XT2aV6WVMnXHVwHIlwQLa6fYySqKq3hKeAm5xZSV7WGmut6ygais7 xq4w== X-Gm-Message-State: AAQBX9dRe8G6ggOTq7Fz/gQrVWY1m2D23tqskxMzrusrloXK62JNdMcg LS+mQ7y9pnyxDvi8H5/6gFs7rnl1y/aKyyKT40sxEsfN X-Google-Smtp-Source: AKy350ZpEMV2xn6E+irCaKRzqbPbxQCvTygYO9oEz7jRENJpZGQ02BDvgP82FnNd0tS4gMZtNqLWEoq9Kt7zEKuhR64= X-Received: by 2002:aa7:d6d5:0:b0:506:adf0:ead5 with SMTP id x21-20020aa7d6d5000000b00506adf0ead5mr457396edr.30.1681770953548; Mon, 17 Apr 2023 15:35:53 -0700 (PDT) MIME-Version: 1.0 References: <20230411133004.2268170-1-josimmon@redhat.com> <20230411133004.2268170-2-josimmon@redhat.com> In-Reply-To: <20230411133004.2268170-2-josimmon@redhat.com> From: Noah Goldstein Date: Mon, 17 Apr 2023 15:35:42 -0700 Message-ID: Subject: Re: [PATCH 1/2] x86_64: Set the syscall register right before doing the syscall. To: Joe Simmons-Talbott Cc: GNU C Library Content-Type: multipart/alternative; boundary="00000000000047a7e705f98fd04c" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --00000000000047a7e705f98fd04c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Apr 11, 2023 at 8:32=E2=80=AFAM Joe Simmons-Talbott via Libc-alpha < libc-alpha@sourceware.org> wrote: > > To make identifying syscalls easier during call tree analysis load the > syscall number just before performing the syscall. > --- > sysdeps/unix/sysv/linux/x86_64/sysdep.h | 33 +++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h > index cfb51be8c5..800a56723f 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h > +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h > @@ -250,12 +250,20 @@ > (long int) resultvar; \ > }) > > +#define MSTR_HELPER(x) #x > +#define MSTR(x) MSTR_HELPER(x) > + > #undef internal_syscall1 > #define internal_syscall1(number, arg1) \ > ({ \ > unsigned long int resultvar; \ > TYPEFY (arg1, __arg1) =3D ARGIFY (arg1); = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > + if (__builtin_constant_p(number)) \ > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > + : /* no outputs */ \ > + : "i" (number) \ > + : "eax"); \ > asm volatile ( \ > "syscall\n\t" \ > : "=3Da" (resultvar) = \ > @@ -272,6 +280,11 @@ > TYPEFY (arg1, __arg1) =3D ARGIFY (arg1); = \ > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > + if (__builtin_constant_p(number)) \ > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > + : /* no outputs */ \ > + : "i" (number) \ > + : "eax"); \ Is it ever possible for another instruction to be re-ordered between setting `eax` and the `syscall`? > asm volatile ( \ > "syscall\n\t" \ > : "=3Da" (resultvar) = \ > @@ -290,6 +303,11 @@ > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > + if (__builtin_constant_p(number)) \ > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > + : /* no outputs */ \ > + : "i" (number) \ > + : "eax"); \ > asm volatile ( \ > "syscall\n\t" \ > : "=3Da" (resultvar) = \ > @@ -310,6 +328,11 @@ > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > + if (__builtin_constant_p(number)) \ > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > + : /* no outputs */ \ > + : "i" (number) \ > + : "eax"); \ > asm volatile ( \ > "syscall\n\t" \ > : "=3Da" (resultvar) = \ > @@ -332,6 +355,11 @@ > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > + if (__builtin_constant_p(number)) \ > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > + : /* no outputs */ \ > + : "i" (number) \ > + : "eax"); \ > asm volatile ( \ > "syscall\n\t" \ > : "=3Da" (resultvar) = \ > @@ -357,6 +385,11 @@ > register TYPEFY (arg3, _a3) asm ("rdx") =3D __arg3; = \ > register TYPEFY (arg2, _a2) asm ("rsi") =3D __arg2; = \ > register TYPEFY (arg1, _a1) asm ("rdi") =3D __arg1; = \ > + if (__builtin_constant_p(number)) \ > + asm volatile ("movl $" MSTR(number) ", %%eax\n\t" \ > + : /* no outputs */ \ > + : "i" (number) \ > + : "eax"); \ > asm volatile ( \ > "syscall\n\t" \ > : "=3Da" (resultvar) = \ > -- > 2.39.2 > --00000000000047a7e705f98fd04c--