linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Julien Thierry <jthierry@redhat.com>
To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: catalin.marinas@arm.com, will@kernel.org, mark.rutland@arm.com,
	ardb@kernel.org, masahiroy@kernel.org, jpoimboe@redhat.com,
	peterz@infradead.org, ycote@redhat.com,
	Julien Thierry <jthierry@redhat.com>
Subject: [RFC PATCH v2 01/13] tools: Add some generic functions and headers
Date: Wed,  3 Mar 2021 18:09:20 +0100	[thread overview]
Message-ID: <20210303170932.1838634-2-jthierry@redhat.com> (raw)
In-Reply-To: <20210303170932.1838634-1-jthierry@redhat.com>

These will be needed to be able to use arm64 instruction decoder in
userland tools.

Signed-off-by: Julien Thierry <jthierry@redhat.com>
---
 tools/include/asm-generic/bitops/__ffs.h | 11 +++++++
 tools/include/linux/kernel.h             | 21 +++++++++++++
 tools/include/linux/printk.h             | 40 ++++++++++++++++++++++++
 3 files changed, 72 insertions(+)
 create mode 100644 tools/include/linux/printk.h

diff --git a/tools/include/asm-generic/bitops/__ffs.h b/tools/include/asm-generic/bitops/__ffs.h
index 9d1310519497..963f8a22212f 100644
--- a/tools/include/asm-generic/bitops/__ffs.h
+++ b/tools/include/asm-generic/bitops/__ffs.h
@@ -42,4 +42,15 @@ static __always_inline unsigned long __ffs(unsigned long word)
 	return num;
 }
 
+static inline unsigned long __ffs64(u64 word)
+{
+#if BITS_PER_LONG == 32
+	if (((u32)word) == 0UL)
+		return __ffs((u32)(word >> 32)) + 32;
+#elif BITS_PER_LONG != 64
+#error BITS_PER_LONG not 32 or 64
+#endif
+	return __ffs((unsigned long)word);
+}
+
 #endif /* _TOOLS_LINUX_ASM_GENERIC_BITOPS___FFS_H_ */
diff --git a/tools/include/linux/kernel.h b/tools/include/linux/kernel.h
index a7e54a08fb54..e748982ed5c1 100644
--- a/tools/include/linux/kernel.h
+++ b/tools/include/linux/kernel.h
@@ -114,6 +114,27 @@ int scnprintf_pad(char * buf, size_t size, const char * fmt, ...);
 #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
 #define round_down(x, y) ((x) & ~__round_mask(x, y))
 
+/**
+ * upper_32_bits - return bits 32-63 of a number
+ * @n: the number we're accessing
+ *
+ * A basic shift-right of a 64- or 32-bit quantity.  Use this to suppress
+ * the "right shift count >= width of type" warning when that quantity is
+ * 32-bits.
+ */
+#define upper_32_bits(n) ((u32)(((n) >> 16) >> 16))
+
+/**
+ * lower_32_bits - return bits 0-31 of a number
+ * @n: the number we're accessing
+ */
+#define lower_32_bits(n) ((u32)(n))
+
+/* Inspired from ALIGN_*_KERNEL */
+#define __ALIGN_MASK(x, mask)	(((x) + (mask)) & ~(mask))
+#define __ALIGN(x, a)		__ALIGN_MASK(x, (typeof(x))(a) - 1)
+#define ALIGN_DOWN(x, a)	__ALIGN((x) - ((a) - 1), (a))
+
 #define current_gfp_context(k) 0
 #define synchronize_rcu()
 
diff --git a/tools/include/linux/printk.h b/tools/include/linux/printk.h
new file mode 100644
index 000000000000..515ebdc47e6e
--- /dev/null
+++ b/tools/include/linux/printk.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _TOOLS_LINUX_KERNEL_PRINTK_H_
+#define _TOOLS_LINUX_KERNEL_PRINTK_H_
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define printk(fmt, ...) fprintf(stdout, fmt, ##__VA_ARGS__)
+#define pr_info printk
+#define pr_notice printk
+#define pr_cont printk
+
+#define pr_warn(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
+#define pr_err pr_warn
+#define pr_alert pr_warn
+#define pr_emerg pr_warn
+#define pr_crit pr_warn
+
+/*
+ * Dummy printk for disabled debugging statements to use whilst maintaining
+ * gcc's format checking.
+ */
+#define no_printk(fmt, ...)				\
+({							\
+	if (0)						\
+		printk(fmt, ##__VA_ARGS__);		\
+	0;						\
+})
+
+/* pr_devel() should produce zero code unless DEBUG is defined */
+#ifdef DEBUG
+#define pr_devel(fmt, ...) printk
+#else
+#define pr_devel(fmt, ...) no_printk
+#endif
+
+#define pr_debug pr_devel
+
+#endif /* _TOOLS_LINUX_KERNEL_PRINTK_H_ */
-- 
2.25.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-03-03 23:44 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03 17:09 [RFC PATCH v2 00/13] objtool: add base support for arm64 Julien Thierry
2021-03-03 17:09 ` Julien Thierry [this message]
2021-03-03 17:09 ` [RFC PATCH v2 02/13] tools: arm64: Make aarch64 instruction decoder available to tools Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 03/13] tools: bug: Remove duplicate definition Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 04/13] objtool: arm64: Add base definition for arm64 backend Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 05/13] objtool: arm64: Decode add/sub instructions Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 06/13] objtool: arm64: Decode jump and call related instructions Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 07/13] objtool: arm64: Decode other system instructions Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 08/13] objtool: arm64: Decode load/store instructions Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 09/13] objtool: arm64: Decode LDR instructions Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 10/13] objtool: arm64: Accept padding in code sections Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 11/13] objtool: arm64: Handle supported relocations in alternatives Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 12/13] objtool: arm64: Ignore replacement section for alternative callback Julien Thierry
2021-03-03 17:09 ` [RFC PATCH v2 13/13] objtool: arm64: Enable stack validation for arm64 Julien Thierry
2021-03-07 10:25   ` Ard Biesheuvel
2021-03-09 14:31     ` Julien Thierry
2021-03-03 19:17 ` [RFC PATCH v2 00/13] objtool: add base support " Peter Zijlstra
2021-03-04 14:03   ` Julien Thierry
2021-03-05 23:51 ` Nick Desaulniers
2021-03-06  0:04   ` Nick Desaulniers
2021-03-09 14:27     ` Julien Thierry

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=20210303170932.1838634-2-jthierry@redhat.com \
    --to=jthierry@redhat.com \
    --cc=ardb@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=jpoimboe@redhat.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=masahiroy@kernel.org \
    --cc=peterz@infradead.org \
    --cc=will@kernel.org \
    --cc=ycote@redhat.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: 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;
as well as URLs for NNTP newsgroup(s).