From: Thomas Huth <thuth@redhat.com>
To: Arnd Bergmann <arnd@arndb.de>,
Nathan Chancellor <nathan@kernel.org>,
Nicolas Schier <nsc@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Chris Li <sparse@chrisli.org>
Cc: soc@lists.linux.dev, linux-kernel@vger.kernel.org,
linux-kbuild@vger.kernel.org,
"Thomas Weißschuh" <linux@weissschuh.net>,
"Nick Desaulniers" <ndesaulniers@google.com>,
"Bill Wendling" <morbo@google.com>,
"Justin Stitt" <justinstitt@google.com>,
linux-sparse@vger.kernel.org, llvm@lists.linux.dev
Subject: [PATCH v5 12/13] include: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers
Date: Fri, 23 Oct 2026 08:48:49 +0200 [thread overview]
Message-ID: <20261023064908.66707-13-thuth@redhat.com> (raw)
In-Reply-To: <20261023064908.66707-1-thuth@redhat.com>
While the GCC and Clang compilers already define __ASSEMBLER__
automatically when compiling assembly code, __ASSEMBLY__ is a
macro that only gets defined by the Makefiles in the kernel.
This can be very confusing when switching between userspace
and kernelspace coding, or when dealing with uapi headers that
rather should use __ASSEMBLER__ instead. So let's standardize now
on the __ASSEMBLER__ macro that is provided by the compilers.
This is a completely mechanical patch (done with a simple "sed -i"
statement).
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
include/linux/amba/serial.h | 4 ++--
include/linux/annotate.h | 18 +++++++++---------
include/linux/cfi_types.h | 6 +++---
include/linux/compiler.h | 4 ++--
include/linux/compiler_types.h | 8 ++++----
include/linux/edd.h | 4 ++--
include/linux/err.h | 2 +-
include/linux/export.h | 2 +-
include/linux/init.h | 6 +++---
include/linux/ioport.h | 4 ++--
include/linux/linkage.h | 6 +++---
include/linux/mem_encrypt.h | 4 ++--
include/linux/pe.h | 4 ++--
include/linux/platform_data/emif_plat.h | 4 ++--
include/linux/ti-emif-sram.h | 2 +-
include/linux/types.h | 4 ++--
tools/include/asm-generic/barrier.h | 4 ++--
tools/include/asm/alternative.h | 2 +-
tools/include/linux/cfi_types.h | 6 +++---
tools/include/linux/compiler.h | 4 ++--
20 files changed, 49 insertions(+), 49 deletions(-)
diff --git a/include/linux/amba/serial.h b/include/linux/amba/serial.h
index 9120de05ead08..b9129c0d6304f 100644
--- a/include/linux/amba/serial.h
+++ b/include/linux/amba/serial.h
@@ -10,7 +10,7 @@
#ifndef ASM_ARM_HARDWARE_SERIAL_AMBA_H
#define ASM_ARM_HARDWARE_SERIAL_AMBA_H
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#include <linux/bitfield.h>
#include <linux/bits.h>
#endif
@@ -215,7 +215,7 @@
#define UART01x_RSR_ANY (UART01x_RSR_OE | UART01x_RSR_BE | UART01x_RSR_PE | UART01x_RSR_FE)
#define UART01x_FR_MODEM_ANY (UART01x_FR_DCD | UART01x_FR_DSR | UART01x_FR_CTS)
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
struct amba_device; /* in uncompress this is included but amba/bus.h is not */
struct amba_pl010_data {
void (*set_mctrl)(struct amba_device *dev, void __iomem *base, unsigned int mctrl);
diff --git a/include/linux/annotate.h b/include/linux/annotate.h
index 2f1599c9e5732..de8fdcb04f44d 100644
--- a/include/linux/annotate.h
+++ b/include/linux/annotate.h
@@ -11,7 +11,7 @@
.long label - ., type; \
.popsection
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#define ASM_ANNOTATE_LABEL(label, type) \
__stringify(__ASM_ANNOTATE(.discard.annotate_insn, label, type))
@@ -24,7 +24,7 @@
"912: " \
__stringify(__ASM_ANNOTATE(.discard.annotate_data, 912b, type))
-#else /* __ASSEMBLY__ */
+#else /* __ASSEMBLER__ */
.macro ANNOTATE type
.Lhere_\@:
@@ -36,22 +36,22 @@
__ASM_ANNOTATE(.discard.annotate_data, .Lhere_\@, \type)
.endm
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#else /* !CONFIG_OBJTOOL */
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#define ASM_ANNOTATE_LABEL(label, type) ""
#define ASM_ANNOTATE(type)
#define ASM_ANNOTATE_DATA(type)
-#else /* __ASSEMBLY__ */
+#else /* __ASSEMBLER__ */
.macro ANNOTATE type
.endm
.macro ANNOTATE_DATA type
.endm
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* !CONFIG_OBJTOOL */
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
/*
* Annotate away the various 'relocation to !ENDBR` complaints; knowing that
@@ -111,7 +111,7 @@
*/
#define ANNOTATE_DATA_SPECIAL ASM_ANNOTATE_DATA(ANNOTYPE_DATA_SPECIAL)
-#else /* __ASSEMBLY__ */
+#else /* __ASSEMBLER__ */
#define ANNOTATE_NOENDBR ANNOTATE type=ANNOTYPE_NOENDBR
#define ANNOTATE_RETPOLINE_SAFE ANNOTATE type=ANNOTYPE_RETPOLINE_SAFE
/* ANNOTATE_INSTR_BEGIN ANNOTATE type=ANNOTYPE_INSTR_BEGIN */
@@ -122,6 +122,6 @@
#define ANNOTATE_REACHABLE ANNOTATE type=ANNOTYPE_REACHABLE
#define ANNOTATE_NOCFI_SYM ANNOTATE type=ANNOTYPE_NOCFI
#define ANNOTATE_DATA_SPECIAL ANNOTATE_DATA type=ANNOTYPE_DATA_SPECIAL
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* _LINUX_ANNOTATE_H */
diff --git a/include/linux/cfi_types.h b/include/linux/cfi_types.h
index a86af9bc8bdc4..b17614c493e4c 100644
--- a/include/linux/cfi_types.h
+++ b/include/linux/cfi_types.h
@@ -5,7 +5,7 @@
#ifndef _LINUX_CFI_TYPES_H
#define _LINUX_CFI_TYPES_H
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
#include <linux/linkage.h>
#ifdef CONFIG_CFI
@@ -41,7 +41,7 @@
SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
#endif
-#else /* __ASSEMBLY__ */
+#else /* __ASSEMBLER__ */
#ifdef CONFIG_CFI
#define DEFINE_CFI_TYPE(name, func) \
@@ -64,5 +64,5 @@
);
#endif
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* _LINUX_CFI_TYPES_H */
diff --git a/include/linux/compiler.h b/include/linux/compiler.h
index 70cb31d605384..bb602ab527c88 100644
--- a/include/linux/compiler.h
+++ b/include/linux/compiler.h
@@ -4,7 +4,7 @@
#include <linux/compiler_types.h>
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#ifdef __KERNEL__
@@ -277,7 +277,7 @@ static inline void *offset_to_ptr(const int *off)
return (void *)((unsigned long)off + *off);
}
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
/*
* Force the compiler to emit 'sym' as a symbol, so that we can reference
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index c5921f1390079..7c2432987105b 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -15,7 +15,7 @@
#define ___PASTE(a, b) a##b
#define __PASTE(a, b) ___PASTE(a, b)
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
/*
* C23 introduces "auto" as a standard way to define type-inferred
@@ -454,7 +454,7 @@ struct ftrace_likely_data {
#endif /* __KERNEL__ */
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
/*
* The below symbols may be defined for one or more, but not ALL, of the above
@@ -598,7 +598,7 @@ struct ftrace_likely_data {
#define asm_inline asm
#endif
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
/*
* Use __typeof_unqual__() when available.
*/
@@ -637,7 +637,7 @@ struct ftrace_likely_data {
#include <asm/percpu_types.h>
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
/*
* __signed_scalar_typeof(x) - Declare a signed scalar type, leaving
diff --git a/include/linux/edd.h b/include/linux/edd.h
index 1c16fbcb81c06..32517f283f044 100644
--- a/include/linux/edd.h
+++ b/include/linux/edd.h
@@ -23,7 +23,7 @@
#include <uapi/linux/edd.h>
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
extern struct edd edd;
-#endif /*!__ASSEMBLY__ */
+#endif /*!__ASSEMBLER__ */
#endif /* _LINUX_EDD_H */
diff --git a/include/linux/err.h b/include/linux/err.h
index d3e38d5b3a985..033faa80be885 100644
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -17,7 +17,7 @@
*/
#define MAX_ERRNO 4095
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
/**
* IS_ERR_VALUE - Detect an error pointer.
diff --git a/include/linux/export.h b/include/linux/export.h
index a686fd0ba4065..432e980140f2b 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -51,7 +51,7 @@
#define __EXPORT_SYMBOL(sym, license, ns) __GENKSYMS_EXPORT_SYMBOL(sym)
-#elif defined(__ASSEMBLY__)
+#elif defined(__ASSEMBLER__)
#define __EXPORT_SYMBOL(sym, license, ns) \
___EXPORT_SYMBOL(sym, license, ns)
diff --git a/include/linux/init.h b/include/linux/init.h
index 6326c61e2332d..cf43f1765eb2e 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -102,7 +102,7 @@
#define __REFDATA .section ".ref.data", "aw"
#define __REFCONST .section ".ref.rodata", "a"
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
/*
* Used for initialization calls..
*/
@@ -180,7 +180,7 @@ extern struct module __this_module;
#ifndef MODULE
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
/*
* initcalls are now grouped by functionality into separate
@@ -375,7 +375,7 @@ extern const struct obs_kernel_param __setup_start[], __setup_end[];
/* Relies on boot_command_line being set */
void __init parse_early_param(void);
void __init parse_early_options(char *cmdline);
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#else /* MODULE */
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index f7930b3dfd0a5..4728386ce65ca 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -9,7 +9,7 @@
#ifndef _LINUX_IOPORT_H
#define _LINUX_IOPORT_H
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#include <linux/args.h>
#include <linux/bits.h>
#include <linux/compiler.h>
@@ -461,5 +461,5 @@ static inline void irqresource_disabled(struct resource *res, u32 irq)
extern struct address_space *iomem_get_mapping(void);
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* _LINUX_IOPORT_H */
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
index 53fe1f48fd28d..303e74cf4ead6 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -66,7 +66,7 @@
* end up needing stack temporaries for).
*/
/* Assembly files may be compiled with -traditional .. */
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#ifndef asmlinkage_protect
# define asmlinkage_protect(n, ret, args...) do { } while (0)
#endif
@@ -77,7 +77,7 @@
#define __ALIGN_STR __stringify(__ALIGN)
#endif
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
/* SYM_T_FUNC -- type used by assembler to mark functions */
#ifndef SYM_T_FUNC
@@ -355,6 +355,6 @@
SYM_DATA_END(name)
#endif
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* _LINUX_LINKAGE_H */
diff --git a/include/linux/mem_encrypt.h b/include/linux/mem_encrypt.h
index 07584c5e36fb4..463090c4f9517 100644
--- a/include/linux/mem_encrypt.h
+++ b/include/linux/mem_encrypt.h
@@ -10,7 +10,7 @@
#ifndef __MEM_ENCRYPT_H__
#define __MEM_ENCRYPT_H__
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#ifdef CONFIG_ARCH_HAS_MEM_ENCRYPT
@@ -54,6 +54,6 @@
#define dma_addr_canonical(x) (x)
#endif
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* __MEM_ENCRYPT_H__ */
diff --git a/include/linux/pe.h b/include/linux/pe.h
index cd2b7275385f3..ab45bba90ce82 100644
--- a/include/linux/pe.h
+++ b/include/linux/pe.h
@@ -240,7 +240,7 @@
#define IMAGE_DEBUG_TYPE_EX_DLLCHARACTERISTICS 20 /* Extended DLL characteristics bits */
#define IMAGE_DEBUG_TYPE_PERFMAP 21 /* Location of associated Ready To Run PerfMap file */
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
struct mz_hdr {
uint16_t magic; /* MZ_MAGIC */
@@ -546,6 +546,6 @@ struct win_certificate {
uint16_t cert_type;
};
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
#endif /* __LINUX_PE_H */
diff --git a/include/linux/platform_data/emif_plat.h b/include/linux/platform_data/emif_plat.h
index b93feef5d586f..ad7f706c124e3 100644
--- a/include/linux/platform_data/emif_plat.h
+++ b/include/linux/platform_data/emif_plat.h
@@ -39,7 +39,7 @@
#define EMIF_CUSTOM_CONFIG_TEMP_ALERT_POLL_INTERVAL 0x00000002
#define EMIF_CUSTOM_CONFIG_EXTENDED_TEMP_PART 0x00000004
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
/**
* struct ddr_device_info - All information about the DDR device except AC
* timing parameters
@@ -121,6 +121,6 @@ struct emif_platform_data {
u32 ip_rev;
u32 phy_type;
};
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* __LINUX_EMIF_H */
diff --git a/include/linux/ti-emif-sram.h b/include/linux/ti-emif-sram.h
index 441b2988e66a5..b256a9b4ef053 100644
--- a/include/linux/ti-emif-sram.h
+++ b/include/linux/ti-emif-sram.h
@@ -10,7 +10,7 @@
#include <linux/kbuild.h>
#include <linux/types.h>
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
struct emif_regs_amx3 {
u32 emif_sdcfg_val;
diff --git a/include/linux/types.h b/include/linux/types.h
index 53e0adca4b9fb..c4aa8cc4b1cd6 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -4,7 +4,7 @@
#include <uapi/linux/types.h>
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#define DECLARE_BITMAP(name,bits) \
unsigned long name[BITS_TO_LONGS(bits)]
@@ -288,5 +288,5 @@ struct rcuwait {
struct task_struct __rcu *task;
};
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* _LINUX_TYPES_H */
diff --git a/tools/include/asm-generic/barrier.h b/tools/include/asm-generic/barrier.h
index 6ef36e920ea8a..b61c3bde0447e 100644
--- a/tools/include/asm-generic/barrier.h
+++ b/tools/include/asm-generic/barrier.h
@@ -13,7 +13,7 @@
#ifndef __TOOLS_LINUX_ASM_GENERIC_BARRIER_H
#define __TOOLS_LINUX_ASM_GENERIC_BARRIER_H
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#include <linux/compiler.h>
@@ -36,5 +36,5 @@
#define wmb() mb()
#endif
-#endif /* !__ASSEMBLY__ */
+#endif /* !__ASSEMBLER__ */
#endif /* __TOOLS_LINUX_ASM_GENERIC_BARRIER_H */
diff --git a/tools/include/asm/alternative.h b/tools/include/asm/alternative.h
index 8e548ac8f740c..85db65074a714 100644
--- a/tools/include/asm/alternative.h
+++ b/tools/include/asm/alternative.h
@@ -3,7 +3,7 @@
#define _TOOLS_ASM_ALTERNATIVE_ASM_H
#if defined(__s390x__)
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
.macro ALTERNATIVE oldinstr, newinstr, feature
\oldinstr
.endm
diff --git a/tools/include/linux/cfi_types.h b/tools/include/linux/cfi_types.h
index a86af9bc8bdc4..b17614c493e4c 100644
--- a/tools/include/linux/cfi_types.h
+++ b/tools/include/linux/cfi_types.h
@@ -5,7 +5,7 @@
#ifndef _LINUX_CFI_TYPES_H
#define _LINUX_CFI_TYPES_H
-#ifdef __ASSEMBLY__
+#ifdef __ASSEMBLER__
#include <linux/linkage.h>
#ifdef CONFIG_CFI
@@ -41,7 +41,7 @@
SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_A_ALIGN)
#endif
-#else /* __ASSEMBLY__ */
+#else /* __ASSEMBLER__ */
#ifdef CONFIG_CFI
#define DEFINE_CFI_TYPE(name, func) \
@@ -64,5 +64,5 @@
);
#endif
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* _LINUX_CFI_TYPES_H */
diff --git a/tools/include/linux/compiler.h b/tools/include/linux/compiler.h
index f2f54b0381680..0e08ad7e9a386 100644
--- a/tools/include/linux/compiler.h
+++ b/tools/include/linux/compiler.h
@@ -2,7 +2,7 @@
#ifndef _TOOLS_LINUX_COMPILER_H_
#define _TOOLS_LINUX_COMPILER_H_
-#ifndef __ASSEMBLY__
+#ifndef __ASSEMBLER__
#include <linux/compiler_types.h>
@@ -256,6 +256,6 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
#endif
#endif
-#endif /* __ASSEMBLY__ */
+#endif /* __ASSEMBLER__ */
#endif /* _TOOLS_LINUX_COMPILER_H */
--
2.56.0
next prev parent reply other threads:[~2026-10-23 6:50 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 6:48 [PATCH v5 00/13] treewide: Replace __ASSEMBLY__ with __ASSEMBLER__ in header files Thomas Huth
2026-10-23 6:48 ` [PATCH v5 01/13] of: fdt: Replace __ASSEMBLY__ with __ASSEMBLER__ in of_fdt.h header file Thomas Huth
2026-10-23 6:48 ` [PATCH v5 02/13] smccc: Replace __ASSEMBLY__ with __ASSEMBLER__ Thomas Huth
2026-10-23 6:48 ` [PATCH v5 03/13] ARM: PXA: " Thomas Huth
2026-10-23 6:48 ` [PATCH v5 04/13] ARM: BCM7XXX: " Thomas Huth
2026-10-23 6:48 ` [PATCH v5 05/13] arm: Replace __ASSEMBLY__ with __ASSEMBLER__ in ptrace uapi header Thomas Huth
2026-10-23 6:48 ` [PATCH v5 06/13] arm: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers Thomas Huth
2026-10-23 6:48 ` [PATCH v5 07/13] hexagon: Replace __ASSEMBLY__ with __ASSEMBLER__ in uapi headers Thomas Huth
2026-10-23 6:48 ` [PATCH v5 08/13] hexagon: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers Thomas Huth
2026-10-23 6:48 ` [PATCH v5 09/13] asm-generic: Replace __ASSEMBLY__ with __ASSEMBLER__ in uapi headers Thomas Huth
2026-10-23 6:48 ` [PATCH v5 10/13] uapi: " Thomas Huth
2026-10-23 6:48 ` [PATCH v5 11/13] asm-generic: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers Thomas Huth
2026-10-23 6:48 ` Thomas Huth [this message]
2026-10-23 15:33 ` [PATCH v5 12/13] include: " Bart Van Assche
2026-10-23 6:48 ` [PATCH v5 13/13] treewide: Stop defining __ASSEMBLY__ for assembler files Thomas Huth
2026-10-23 15:47 ` [PATCH v5 00/13] treewide: Replace __ASSEMBLY__ with __ASSEMBLER__ in header files Thomas Weißschuh
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=20261023064908.66707-13-thuth@redhat.com \
--to=thuth@redhat.com \
--cc=arnd@arndb.de \
--cc=justinstitt@google.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sparse@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linux@weissschuh.net \
--cc=llvm@lists.linux.dev \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nsc@kernel.org \
--cc=soc@lists.linux.dev \
--cc=sparse@chrisli.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®