From: "Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com> To: Yury Norov <ynorov@caviumnetworks.com>, Andreas Schwab <schwab@suse.de> Cc: <arnd@arndb.de>, <catalin.marinas@arm.com>, <linux-arm-kernel@lists.infradead.org>, <linux-kernel@vger.kernel.org>, <pinskia@gmail.com>, <Prasun.Kapoor@caviumnetworks.com>, <broonie@kernel.org>, <heiko.carstens@de.ibm.com>, <agraf@suse.de>, <klimov.linux@gmail.com>, <jan.dakinevich@gmail.com>, <schwidefsky@de.ibm.com>, <Nathan_Lynch@mentor.com>, <joseph@codesourcery.com>, <christoph.muellner@theobroma-systems.com>, "Bamvor Zhang Jian" <bamvor.zhangjian@linaro.org>, "Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com>, "jijun (D)" <jijun2@huawei.com>, <young.liuyang@huawei.com>, <gaoyongliang@huawei.com>, Ding Tianhong <dingtianhong@huawei.com> Subject: Re: [RFC5 PATCH v6 00/21] ILP32 for ARM64 Date: Sat, 26 Mar 2016 21:45:53 +0800 [thread overview] Message-ID: <56F69291.4050205@huawei.com> (raw) In-Reply-To: <20160321184012.GA26563@yury-N73SV> Hi, guys Does any body test the bigendian? We found lots of failures in be in our arm64 hardware. E.g. the signal issue. IIUC, the signal of struct in ILP32 is align with the aarch32. If so, we need to revert the following patch wrote by Andrew in 2014 which align the kernel_sigaction of ilp32 to lp64: Revert "[AARCH64] Add kernel_sigaction.h for AARCH64 ILP32" And we also need to handle the uc_stack properly in kernel. After apply these two patches, we could fix lots of failure in bigendian. Regards Bamvor From cb08043a1f14eb997892711c2e1e5016b0e9eef6 Mon Sep 17 00:00:00 2001 From: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com> Date: Thu, 24 Mar 2016 10:40:47 +0800 Subject: [PATCH] try to fix the signal issue in be Currently, there is different layout in uc_stack in le and be. Try to fix the issue by processing uc_stack through corresponding compat function. Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com> --- arch/arm64/kernel/signal_ilp32.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/signal_ilp32.c b/arch/arm64/kernel/signal_ilp32.c index 26b3121..9af29e0 100644 --- a/arch/arm64/kernel/signal_ilp32.c +++ b/arch/arm64/kernel/signal_ilp32.c @@ -60,7 +60,7 @@ asmlinkage int ilp32_sys_rt_sigreturn(struct pt_regs *regs) if (restore_sigframe(regs, &frame->sig)) goto badframe; - if (restore_altstack(&frame->sig.uc.uc_stack)) + if (compat_restore_altstack(&frame->sig.uc.uc_stack)) goto badframe; return regs->regs[0]; @@ -112,7 +112,7 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig, __put_user_error(0, &frame->sig.uc.uc_flags, err); __put_user_error(NULL, &frame->sig.uc.uc_link, err); - err |= __save_altstack(&frame->sig.uc.uc_stack, regs->sp); + err |= __compat_save_altstack(&frame->sig.uc.uc_stack, regs->sp); err |= setup_sigframe(&frame->sig, regs, set); if (err == 0) { setup_return(regs, &ksig->ka, frame, -- 1.8.4.5 From f6cde6e2a75a4b153758eea679c5a839fc1c39d2 Mon Sep 17 00:00:00 2001 From: "Zhang Jian(Bamvor)" <bamvor.zhangjian@huawei.com> Date: Sat, 26 Mar 2016 18:10:38 +0800 Subject: [PATCH] Revert "[AARCH64] Add kernel_sigaction.h for AARCH64 ILP32" This reverts commit 68e11d8643cfd08a62cea3555e92d77a21bf41de. --- sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h | 12 ------------ sysdeps/unix/sysv/linux/aarch64/sigaction.c | 10 ++++------ 2 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h b/sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h deleted file mode 100644 index 7b3023b..0000000 --- a/sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h +++ /dev/null @@ -1,12 +0,0 @@ - -#define HAVE_SA_RESTORER - -/* This is the sigaction structure in aarch64 kernel. - Note the ILP32 struct uses the same struct as LP64 - which is why the fields are 64bit in size. */ -struct kernel_sigaction { - unsigned long long k_sa_handler; - unsigned long long sa_flags; - unsigned long long sa_restorer; - sigset_t sa_mask; -}; diff --git a/sysdeps/unix/sysv/linux/aarch64/sigaction.c b/sysdeps/unix/sysv/linux/aarch64/sigaction.c index 5d22b68..2679acd 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sigaction.c +++ b/sysdeps/unix/sysv/linux/aarch64/sigaction.c @@ -39,17 +39,15 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) if (act) { - kact.k_sa_handler = (unsigned long long)(uintptr_t)act->sa_handler; + kact.k_sa_handler = act->sa_handler; memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); kact.sa_flags = act->sa_flags; #ifdef HAVE_SA_RESTORER if (kact.sa_flags & SA_RESTORER) - kact.sa_restorer = (unsigned long long)(uintptr_t)act->sa_restorer; + kact.sa_restorer = act->sa_restorer; #endif } - /* This is needed for ILP32 as the structures are two different sizes due to - using the LP64 structure. */ result = INLINE_SYSCALL (rt_sigaction, 4, sig, act ? &kact : NULL, oact ? &koact : NULL, _NSIG / 8); @@ -57,11 +55,11 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) { if (oact && result >= 0) { - oact->sa_handler = (void*)(uintptr_t)koact.k_sa_handler; + oact->sa_handler = koact.k_sa_handler; memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); oact->sa_flags = koact.sa_flags; #ifdef HAVE_SA_RESTORER - oact->sa_restorer = (void*)(uintptr_t)koact.sa_restorer; + oact->sa_restorer = koact.sa_restorer; #endif } } -- 1.8.4.5
WARNING: multiple messages have this Message-ID (diff)
From: bamvor.zhangjian@huawei.com (Zhangjian (Bamvor)) To: linux-arm-kernel@lists.infradead.org Subject: [RFC5 PATCH v6 00/21] ILP32 for ARM64 Date: Sat, 26 Mar 2016 21:45:53 +0800 [thread overview] Message-ID: <56F69291.4050205@huawei.com> (raw) In-Reply-To: <20160321184012.GA26563@yury-N73SV> Hi, guys Does any body test the bigendian? We found lots of failures in be in our arm64 hardware. E.g. the signal issue. IIUC, the signal of struct in ILP32 is align with the aarch32. If so, we need to revert the following patch wrote by Andrew in 2014 which align the kernel_sigaction of ilp32 to lp64: Revert "[AARCH64] Add kernel_sigaction.h for AARCH64 ILP32" And we also need to handle the uc_stack properly in kernel. After apply these two patches, we could fix lots of failure in bigendian. Regards Bamvor From cb08043a1f14eb997892711c2e1e5016b0e9eef6 Mon Sep 17 00:00:00 2001 From: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com> Date: Thu, 24 Mar 2016 10:40:47 +0800 Subject: [PATCH] try to fix the signal issue in be Currently, there is different layout in uc_stack in le and be. Try to fix the issue by processing uc_stack through corresponding compat function. Signed-off-by: Bamvor Jian Zhang <bamvor.zhangjian@huawei.com> --- arch/arm64/kernel/signal_ilp32.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/signal_ilp32.c b/arch/arm64/kernel/signal_ilp32.c index 26b3121..9af29e0 100644 --- a/arch/arm64/kernel/signal_ilp32.c +++ b/arch/arm64/kernel/signal_ilp32.c @@ -60,7 +60,7 @@ asmlinkage int ilp32_sys_rt_sigreturn(struct pt_regs *regs) if (restore_sigframe(regs, &frame->sig)) goto badframe; - if (restore_altstack(&frame->sig.uc.uc_stack)) + if (compat_restore_altstack(&frame->sig.uc.uc_stack)) goto badframe; return regs->regs[0]; @@ -112,7 +112,7 @@ int ilp32_setup_rt_frame(int usig, struct ksignal *ksig, __put_user_error(0, &frame->sig.uc.uc_flags, err); __put_user_error(NULL, &frame->sig.uc.uc_link, err); - err |= __save_altstack(&frame->sig.uc.uc_stack, regs->sp); + err |= __compat_save_altstack(&frame->sig.uc.uc_stack, regs->sp); err |= setup_sigframe(&frame->sig, regs, set); if (err == 0) { setup_return(regs, &ksig->ka, frame, -- 1.8.4.5 From f6cde6e2a75a4b153758eea679c5a839fc1c39d2 Mon Sep 17 00:00:00 2001 From: "Zhang Jian(Bamvor)" <bamvor.zhangjian@huawei.com> Date: Sat, 26 Mar 2016 18:10:38 +0800 Subject: [PATCH] Revert "[AARCH64] Add kernel_sigaction.h for AARCH64 ILP32" This reverts commit 68e11d8643cfd08a62cea3555e92d77a21bf41de. --- sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h | 12 ------------ sysdeps/unix/sysv/linux/aarch64/sigaction.c | 10 ++++------ 2 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h diff --git a/sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h b/sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h deleted file mode 100644 index 7b3023b..0000000 --- a/sysdeps/unix/sysv/linux/aarch64/kernel_sigaction.h +++ /dev/null @@ -1,12 +0,0 @@ - -#define HAVE_SA_RESTORER - -/* This is the sigaction structure in aarch64 kernel. - Note the ILP32 struct uses the same struct as LP64 - which is why the fields are 64bit in size. */ -struct kernel_sigaction { - unsigned long long k_sa_handler; - unsigned long long sa_flags; - unsigned long long sa_restorer; - sigset_t sa_mask; -}; diff --git a/sysdeps/unix/sysv/linux/aarch64/sigaction.c b/sysdeps/unix/sysv/linux/aarch64/sigaction.c index 5d22b68..2679acd 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sigaction.c +++ b/sysdeps/unix/sysv/linux/aarch64/sigaction.c @@ -39,17 +39,15 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) if (act) { - kact.k_sa_handler = (unsigned long long)(uintptr_t)act->sa_handler; + kact.k_sa_handler = act->sa_handler; memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); kact.sa_flags = act->sa_flags; #ifdef HAVE_SA_RESTORER if (kact.sa_flags & SA_RESTORER) - kact.sa_restorer = (unsigned long long)(uintptr_t)act->sa_restorer; + kact.sa_restorer = act->sa_restorer; #endif } - /* This is needed for ILP32 as the structures are two different sizes due to - using the LP64 structure. */ result = INLINE_SYSCALL (rt_sigaction, 4, sig, act ? &kact : NULL, oact ? &koact : NULL, _NSIG / 8); @@ -57,11 +55,11 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact) { if (oact && result >= 0) { - oact->sa_handler = (void*)(uintptr_t)koact.k_sa_handler; + oact->sa_handler = koact.k_sa_handler; memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); oact->sa_flags = koact.sa_flags; #ifdef HAVE_SA_RESTORER - oact->sa_restorer = (void*)(uintptr_t)koact.sa_restorer; + oact->sa_restorer = koact.sa_restorer; #endif } } -- 1.8.4.5
next prev parent reply other threads:[~2016-03-26 13:47 UTC|newest] Thread overview: 143+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-01-14 17:22 [RFC5 PATCH v6 00/21] ILP32 for ARM64 Yury Norov 2016-01-14 17:22 ` Yury Norov 2016-01-14 17:22 ` [PATCH v6 01/21] arm64: ilp32: add documentation on the ILP32 ABI " Yury Norov 2016-01-14 17:22 ` Yury Norov 2016-01-14 17:22 ` [PATCH v6 02/21] arm64: ensure the kernel is compiled for LP64 Yury Norov 2016-01-14 17:22 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 03/21] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 04/21] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 05/21] arm64: compat: change config dependences to aarch32 Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 06/21] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 07/21] thread: move thread bits accessors to separated file Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 08/21] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 09/21] arm64: ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Yury Norov 2016-01-14 17:23 ` [PATCH v6 09/21] arm64: ilp32: add is_ilp32_compat_{task, thread} " Yury Norov 2016-01-14 17:23 ` [PATCH v6 10/21] arm64: introduce binfmt_elf32.c Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 11/21] arm64: ilp32: introduce binfmt_ilp32.c Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 12/21] arm64: ptrace: handle ptrace_request differently for aarch32 and ilp32 Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 13/21] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 14/21] arm64: signal: wrap struct ucontext, fp and lr with struct sigframe Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 15/21] arm64: signal: share lp64 signal routines to ilp32 Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 16/21] arm64: signal32: move ilp32 and aarch32 common code to separated file Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 17/21] arm64: ilp32: introduce ilp32-specific handlers for sigframe Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-02-29 8:27 ` Andreas Schwab 2016-02-29 8:27 ` Andreas Schwab 2016-01-14 17:23 ` [PATCH v6 18/21] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 19/21] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 20/21] all: s390: make compat wrappers the generic solution Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-14 18:11 ` Yury Norov 2016-01-14 18:11 ` Yury Norov 2016-01-15 12:46 ` Heiko Carstens 2016-01-15 12:46 ` Heiko Carstens 2016-01-19 17:52 ` Yury Norov 2016-01-20 8:16 ` Heiko Carstens 2016-01-20 8:16 ` Heiko Carstens 2016-01-20 12:17 ` Yury Norov 2016-01-20 12:17 ` Yury Norov 2016-01-14 17:23 ` [PATCH v6 21/21] arm64: ilp32: wrap syscalls to remove top 32-bit vulnerability Yury Norov 2016-01-14 17:23 ` Yury Norov 2016-01-18 13:18 ` [RFC5 PATCH v6 00/21] ILP32 for ARM64 Zhangjian (Bamvor) 2016-01-18 13:18 ` Zhangjian (Bamvor) 2016-01-18 13:26 ` Andreas Schwab 2016-01-18 13:26 ` Andreas Schwab 2016-01-18 13:41 ` Bamvor Zhang Jian 2016-01-18 13:41 ` Bamvor Zhang Jian 2016-01-29 9:59 ` Zhangjian (Bamvor) 2016-01-29 9:59 ` Zhangjian (Bamvor) 2016-01-29 17:09 ` Yury Norov 2016-01-29 17:09 ` Yury Norov 2016-01-30 4:15 ` Zhangjian (Bamvor) 2016-01-30 4:15 ` Zhangjian (Bamvor) 2016-02-18 22:35 ` Yury Norov 2016-02-18 22:35 ` Yury Norov 2016-02-19 8:23 ` Arnd Bergmann 2016-02-19 8:23 ` Arnd Bergmann 2016-02-19 12:59 ` Yury Norov 2016-02-19 12:59 ` Yury Norov 2016-02-19 14:06 ` Arnd Bergmann 2016-02-19 14:06 ` Arnd Bergmann 2016-02-29 15:39 ` Yury Norov 2016-02-29 15:39 ` Yury Norov 2016-02-29 16:00 ` Andreas Schwab 2016-02-29 16:00 ` Andreas Schwab 2016-02-29 16:30 ` Arnd Bergmann 2016-02-29 16:30 ` Arnd Bergmann 2016-02-25 10:50 ` Andreas Schwab 2016-02-25 10:50 ` Andreas Schwab 2016-02-25 20:28 ` Yury Norov 2016-02-25 20:28 ` Yury Norov 2016-03-18 10:28 ` Zhangjian (Bamvor) 2016-03-18 10:28 ` Zhangjian (Bamvor) 2016-03-18 15:49 ` Yury Norov 2016-03-18 15:49 ` Yury Norov 2016-03-18 15:55 ` Alexander Graf 2016-03-18 15:55 ` Alexander Graf 2016-03-18 16:46 ` Yury Norov 2016-03-18 16:46 ` Yury Norov 2016-03-20 8:12 ` Zhangjian (Bamvor) 2016-03-20 8:12 ` Zhangjian (Bamvor) 2016-03-21 11:23 ` Zhangjian (Bamvor) 2016-03-21 11:23 ` Zhangjian (Bamvor) 2016-03-21 18:43 ` Yury Norov 2016-03-21 18:43 ` Yury Norov 2016-03-22 1:49 ` Yury Norov 2016-03-22 1:49 ` Yury Norov 2016-03-21 9:07 ` Andreas Schwab 2016-03-21 9:07 ` Andreas Schwab 2016-03-21 9:43 ` Arnd Bergmann 2016-03-21 9:43 ` Arnd Bergmann 2016-03-21 10:52 ` Andreas Schwab 2016-03-21 10:52 ` Andreas Schwab 2016-03-21 17:02 ` Arnd Bergmann 2016-03-21 17:02 ` Arnd Bergmann 2016-03-26 12:36 ` Zhangjian (Bamvor) 2016-03-26 12:36 ` Zhangjian (Bamvor) 2016-03-29 10:58 ` Arnd Bergmann 2016-03-29 10:58 ` Arnd Bergmann 2016-03-29 12:01 ` Yury Norov 2016-03-29 12:01 ` Yury Norov 2016-03-29 12:42 ` Arnd Bergmann 2016-03-29 12:42 ` Arnd Bergmann 2016-03-29 13:21 ` Zhangjian (Bamvor) 2016-03-29 13:21 ` Zhangjian (Bamvor) 2016-03-29 13:27 ` Arnd Bergmann 2016-03-29 13:27 ` Arnd Bergmann 2016-03-29 15:54 ` Joseph Myers 2016-03-29 15:54 ` Joseph Myers 2016-03-29 19:30 ` Arnd Bergmann 2016-03-29 19:30 ` Arnd Bergmann 2016-03-29 20:15 ` Joseph Myers 2016-03-29 20:15 ` Joseph Myers 2016-03-29 20:24 ` Arnd Bergmann 2016-03-29 20:24 ` Arnd Bergmann 2016-03-29 21:00 ` Joseph Myers 2016-03-29 21:00 ` Joseph Myers 2016-03-29 21:39 ` Arnd Bergmann 2016-03-29 21:39 ` Arnd Bergmann 2016-03-31 7:35 ` Zhangjian (Bamvor) 2016-03-31 7:35 ` Zhangjian (Bamvor) 2016-03-21 18:40 ` Yury Norov 2016-03-21 18:40 ` Yury Norov 2016-03-26 13:08 ` Zhangjian (Bamvor) 2016-03-26 13:08 ` Zhangjian (Bamvor) 2016-03-26 13:45 ` Zhangjian (Bamvor) [this message] 2016-03-26 13:45 ` Zhangjian (Bamvor) 2016-03-26 22:46 ` Yury Norov 2016-03-26 22:46 ` Yury Norov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=56F69291.4050205@huawei.com \ --to=bamvor.zhangjian@huawei.com \ --cc=Nathan_Lynch@mentor.com \ --cc=Prasun.Kapoor@caviumnetworks.com \ --cc=agraf@suse.de \ --cc=arnd@arndb.de \ --cc=bamvor.zhangjian@linaro.org \ --cc=broonie@kernel.org \ --cc=catalin.marinas@arm.com \ --cc=christoph.muellner@theobroma-systems.com \ --cc=dingtianhong@huawei.com \ --cc=gaoyongliang@huawei.com \ --cc=heiko.carstens@de.ibm.com \ --cc=jan.dakinevich@gmail.com \ --cc=jijun2@huawei.com \ --cc=joseph@codesourcery.com \ --cc=klimov.linux@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=pinskia@gmail.com \ --cc=schwab@suse.de \ --cc=schwidefsky@de.ibm.com \ --cc=ynorov@caviumnetworks.com \ --cc=young.liuyang@huawei.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.