All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: <linux-kernel@vger.kernel.org>
Subject: [PATCH 26/39] NLKD - run time library
Date: Wed, 09 Nov 2005 15:22:39 +0100	[thread overview]
Message-ID: <4372143F.76F0.0078.0@novell.com> (raw)
In-Reply-To: 4372135F.76F0.0078.0@novell.com

[-- Attachment #1: Type: text/plain, Size: 202 bytes --]

Some support definitions and routines of NLKD, the latter primarily to
isolate the debugger code from the rest of the kernel.

Signed-Off-By: Jan Beulich <jbeulich@novell.com>

(actual patch attached)


[-- Attachment #2: nlkd-rtl.patch --]
[-- Type: application/octet-stream, Size: 11462 bytes --]

Some support definitions and routines of NLKD, the latter primarily to
isolate the debugger code from the rest of the kernel.

Signed-Off-By: Jan Beulich <jbeulich@novell.com>

Index: 2.6.14-nlkd/debug/nlkd/dbgutil.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/debug/nlkd/dbgutil.c	2005-06-27 11:57:55.000000000 +0200
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ *
+ *   File Name:      dbgutil.c
+ *   Created by:     Jan Beulich
+ *   Date created:   21Jul1999
+ *
+ *   %version:       5 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Mon Jun 27 03:57:44 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	File Description:
+ *
+ *****************************************************************************/
+
+#include <linux/debugrtl.h>
+
+#if !defined(_M_IA64) && !defined(__ia64__) \
+ && !defined(_M_IX86) && !defined(__i386__) \
+ && !defined(_M_AMD64) && !defined(__x86_64__)
+asmlinkage DbgQuotRemS dbgDivideS(nint_t numer, nint_t denom) {
+	DbgQuotRemS sd;
+
+	if (denom == 1)
+	{
+		sd.quot = numer;
+		sd.rem  = 0;
+	}
+	else if (denom == -1)
+	{
+		sd.quot = -numer;
+		sd.rem  = 0;
+	}
+	else
+	{
+		sd.quot = numer / denom;
+		sd.rem  = numer % denom;
+	}
+
+	return sd;
+}
+
+asmlinkage DbgQuotRemU dbgDivideU(nuint_t numer, nuint_t denom) {
+	DbgQuotRemU ud;
+
+	if (denom == 1)
+	{
+		ud.quot = numer;
+		ud.rem  = 0;
+	}
+	else
+	{
+		ud.quot = numer / denom;
+		ud.rem  = numer % denom;
+	}
+	return ud;
+}
+#endif
+
+asmlinkage char*dbgCatStr(char*dst, const char*src) {
+	dbgCopyStr(dst + dbgCountStr(dst), src);
+	return dst;
+}
+
+#include <linux/module.h>
+#define DEBUGRTL_EXPORT(type, name, ...) EXPORT_SYMBOL(name)
+#include <linux/debugrtl.h>
Index: 2.6.14-nlkd/include/linux/debugrtl.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ 2.6.14-nlkd/include/linux/debugrtl.h	2005-11-03 12:03:04.000000000 +0100
@@ -0,0 +1,170 @@
+/*****************************************************************************
+ *
+ *   File Name:      debugrtl.h
+ *   Created by:     Jan Beulich
+ *   Date created:   21Jul1999
+ *
+ *   %version:       9 %
+ *   %derived_by:    jbeulich %
+ *   %date_modified: Thu Nov 03 04:02:51 2005 %
+ *
+ *****************************************************************************/
+/*****************************************************************************
+ *                                                                           *
+ * Copyright (c) 1999-2005 Novell, Inc. All Rights Reserved.                 *
+ *                                                                           *
+ * This program is free software; you can redistribute it and/or             *
+ * modify it under the terms of version 2 of the GNU General Public License  *
+ * as published by the Free Software Foundation.                             *
+ *                                                                           *
+ * This program is distributed in the hope that it will be useful,           *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the              *
+ * GNU General Public License for more details.                              *
+ *                                                                           *
+ * You should have received a copy of the GNU General Public License         *
+ * along with this program; if not, contact Novell, Inc.                     *
+ *                                                                           *
+ * To contact Novell about this file by physical or electronic mail,         *
+ * you may find current contact information at www.novell.com.               *
+ *                                                                           *
+ *****************************************************************************/
+/*****************************************************************************
+ *
+ *	File Description:
+ *
+ *****************************************************************************/
+#if !defined(_LINUX_DEBUGRTL_H) || defined(DEBUGRTL_EXPORT)
+
+#ifndef _LINUX_DEBUGRTL_H
+
+# include <linux/config.h>
+# include <linux/linkage.h>
+# include <linux/nint.h>
+
+# define mkalign(d, a) (((d) + ((a) - 1)) & ~((a) - 1))
+# define countof(a) (sizeof(a) / sizeof(*a))
+# define field_sizeof(t, f) (sizeof(((t*)0)->f))
+# define field_countof(t, a) (countof(((t*)0)->a))
+# define field_end(t, f) (offsetof(t, f) + field_sizeof(t, f))
+# define field_typeof(t, f) __typeof__(((t*)0)->f)
+
+# ifdef CONFIG_64BIT
+typedef uint64_t bitvec_t;
+#  define BITVEC_INDEX_SHIFT 6
+# else
+typedef uint32_t bitvec_t;
+#  define BITVEC_INDEX_SHIFT 5
+# endif
+
+# define BITVEC_INDEX_MASK ((1U << BITVEC_INDEX_SHIFT) - 1)
+
+# define BITVEC_SZ(n)	(((n) + BITVEC_INDEX_MASK) >> BITVEC_INDEX_SHIFT)
+# define BITVEC_CLR(p, n)	(((bitvec_t*)(p))[(n) >> BITVEC_INDEX_SHIFT] &= ~((bitvec_t)1 << ((n) & BITVEC_INDEX_MASK)))
+# define BITVEC_SET(p, n)	(((bitvec_t*)(p))[(n) >> BITVEC_INDEX_SHIFT] |=  ((bitvec_t)1 << ((n) & BITVEC_INDEX_MASK)))
+# define BITVEC_TST(p, n)	((((bitvec_t*)(p))[(n) >> BITVEC_INDEX_SHIFT] >> ((n) & BITVEC_INDEX_MASK)) & 1)
+
+typedef struct {
+	nint_t quot;
+	nint_t rem;
+} DbgQuotRemS;
+
+typedef struct {
+	nuint_t quot;
+	nuint_t rem;
+} DbgQuotRemU;
+
+# define DEBUGRTL_EXPORT(type, name, ...) type name(__VA_ARGS__)
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+#endif /* _LINUX_DEBUGRTL_H */
+
+DEBUGRTL_EXPORT(asmlinkage char*, dbgCatStr, char*, const char*);
+DEBUGRTL_EXPORT(asmlinkage int, dbgCompareMem, const void*, const void*, size_t);
+DEBUGRTL_EXPORT(asmlinkage int, dbgCompareStr, const char*, const char*);
+DEBUGRTL_EXPORT(           void*, dbgCopyMem, void*, const void*, size_t);
+DEBUGRTL_EXPORT(asmlinkage char*, dbgCopyStr, char*, const char*);
+DEBUGRTL_EXPORT(asmlinkage char*, dbgCopyStrP, char*, const char*);
+DEBUGRTL_EXPORT(asmlinkage unsigned, dbgCountBits, uint64_t);
+DEBUGRTL_EXPORT(asmlinkage size_t, dbgCountStr, const char*);
+DEBUGRTL_EXPORT(asmlinkage size_t, dbgCountWstr, const wchar_t*);
+DEBUGRTL_EXPORT(asmlinkage DbgQuotRemS, dbgDivideS, nint_t, nint_t);
+DEBUGRTL_EXPORT(asmlinkage DbgQuotRemU, dbgDivideU, nuint_t, nuint_t);
+DEBUGRTL_EXPORT(           void*, dbgFillMem, void*, int, size_t);
+DEBUGRTL_EXPORT(asmlinkage void*, dbgFindByte, const void*, int, size_t);
+DEBUGRTL_EXPORT(asmlinkage char*, dbgFindChar, const char*, int);
+DEBUGRTL_EXPORT(asmlinkage uint8_t*, dbgFindInt8, const uint8_t*, uint8_t, size_t);
+DEBUGRTL_EXPORT(asmlinkage uint16_t*, dbgFindInt16, const uint16_t*, uint16_t, size_t);
+DEBUGRTL_EXPORT(asmlinkage uint32_t*, dbgFindInt32, const uint32_t*, uint32_t, size_t);
+#ifdef CONFIG_64BIT
+DEBUGRTL_EXPORT(asmlinkage uint64_t*, dbgFindInt64, const uint64_t*, uint64_t, size_t);
+#endif
+DEBUGRTL_EXPORT(asmlinkage nuint_t*, dbgFindIntN, const nuint_t*, nuint_t, size_t);
+DEBUGRTL_EXPORT(asmlinkage void**, dbgFindPtr, const void*const*, const void*, size_t);
+DEBUGRTL_EXPORT(asmlinkage wchar_t*, dbgFindWchar, const wchar_t*, wchar_t);
+#undef dbgLower
+DEBUGRTL_EXPORT(asmlinkage int, dbgLower, int);
+DEBUGRTL_EXPORT(asmlinkage nint_t, dbgLog2, uint64_t);
+DEBUGRTL_EXPORT(asmlinkage uint64_t, dbgMultiply, uint64_t, uint64_t, uint64_t*overflow);
+DEBUGRTL_EXPORT(asmlinkage uint8_t, dbgRotl8, uint8_t, nuint_t);
+DEBUGRTL_EXPORT(asmlinkage uint16_t, dbgRotl16, uint16_t, nuint_t);
+DEBUGRTL_EXPORT(asmlinkage uint32_t, dbgRotl32, uint32_t, nuint_t);
+DEBUGRTL_EXPORT(asmlinkage uint64_t, dbgRotl64, uint64_t, nuint_t);
+DEBUGRTL_EXPORT(asmlinkage uint8_t, dbgRotr8, uint8_t, nuint_t);
+DEBUGRTL_EXPORT(asmlinkage uint16_t, dbgRotr16, uint16_t, nuint_t);
+DEBUGRTL_EXPORT(asmlinkage uint32_t, dbgRotr32, uint32_t, nuint_t);
+DEBUGRTL_EXPORT(asmlinkage uint64_t, dbgRotr64, uint64_t, nuint_t);
+#undef dbgUpper
+DEBUGRTL_EXPORT(asmlinkage int, dbgUpper, int);
+DEBUGRTL_EXPORT(asmlinkage char*, dbgWstr2Str, char*, const wchar_t*);
+DEBUGRTL_EXPORT(           void*, dbgZeroMem, void*, size_t);
+
+#ifndef _LINUX_DEBUGRTL_H
+
+# ifdef __cplusplus
+
+inline int dbgLower(int c) { return c >= 'A' && c <= 'Z' ? c + 'a' - 'A' : c; }
+inline int dbgUpper(int c) { return c >= 'a' && c <= 'z' ? c + 'A' - 'a' : c; }
+
+}
+
+# endif
+
+//todo The .global in the following constructs is just a workaround for a bug
+//     in binutils shipped with SL 10.0. This will *ONLY* work if the producer
+//     doesn't include this file (which currently is the case because all
+//     producers are assembly files) - otherwise we'll end up with, say, a
+//     global memcpy defined there and colliding with or overriding the real
+//     one from the kernel's strings library code.
+__asm__(".equiv memcpy, dbgCopyMem\n\t.global memcpy");
+__asm__(".equiv memset, dbgFillMem\n\t.global memset");
+
+# define DEBUGRTL_ALIAS(name) __asm__(".equiv " #name ", dbg" #name "\n\t.global " #name)
+
+# define _LINUX_DEBUGRTL_H
+
+#else
+
+# define DEBUGRTL_ALIAS(name) void dbg##name(void); DEBUGRTL_EXPORT(void, dbg##name, void)
+
+#endif /* _LINUX_DEBUGRTL_H */
+
+#ifndef __cplusplus
+# define dbgLower(c) ((c) >= 'A' && (c) <= 'Z' ? (c) + 'a' - 'A' : (c))
+# define dbgUpper(c) ((c) >= 'a' && (c) <= 'z' ? (c) + 'A' - 'a' : (c))
+#endif
+
+#if defined(__i386__)
+DEBUGRTL_ALIAS(__divdi3);
+DEBUGRTL_ALIAS(__moddi3);
+DEBUGRTL_ALIAS(__udivdi3);
+DEBUGRTL_ALIAS(__umoddi3);
+#endif
+
+#undef DEBUGRTL_ALIAS
+#undef DEBUGRTL_EXPORT
+
+#endif /* !_LINUX_DEBUGRTL_H || DEBUGRTL_EXPORT */

  parent reply	other threads:[~2005-11-09 14:21 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-09 13:54 [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jan Beulich
2005-11-09 13:56 ` [PATCH 1/39] NLKD - an alternative kallsyms approach Jan Beulich
2005-11-09 13:57   ` [PATCH 2/39] NLKD - an alternative early ioremap approach Jan Beulich
2005-11-09 13:58     ` [PATCH 3/39] NLKD - early/late CPU up/down notification Jan Beulich
2005-11-09 13:59       ` [PATCH 4/39] NLKD/i386 " Jan Beulich
2005-11-09 14:01       ` [PATCH 5/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:10         ` Andi Kleen
2005-11-14  8:04           ` [discuss] " Jan Beulich
2005-11-14 12:37             ` Andi Kleen
2005-11-09 14:01       ` [PATCH 6/39] NLKD - early panic notification Jan Beulich
2005-11-09 14:02         ` [PATCH 7/39] NLKD - task create/destroy notification Jan Beulich
2005-11-09 14:03           ` [PATCH 8/39] NLKD - rmmod notification Jan Beulich
2005-11-09 14:04             ` [PATCH 9/39] NLKD - hotkey notification Jan Beulich
2005-11-09 14:05               ` [PATCH 10/39] NLKD - console layout change notification Jan Beulich
2005-11-09 14:06                 ` [PATCH 11/39] NLKD - time adjustment Jan Beulich
2005-11-09 14:06                   ` [PATCH 12/39] NLKD/i386 " Jan Beulich
2005-11-09 19:10                     ` George Anzinger
2005-11-10  8:12                       ` Jan Beulich
2005-11-11  0:17                         ` George Anzinger
2005-11-09 14:08                   ` [PATCH 13/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:13                     ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Jan Beulich
2005-11-09 14:14                       ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Jan Beulich
2005-11-09 14:15                         ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Jan Beulich
2005-11-09 14:16                           ` [PATCH 21/39] NLKD/x86-64 - core adjustments Jan Beulich
2005-11-10 13:24                           ` [PATCH 20/39] NLKD/x86-64 - switch_to() floating point adjustment Andi Kleen
2005-11-10 14:07                             ` Jan Beulich
2005-11-10 13:23                         ` [PATCH 19/39] NLKD/x86-64 - stack-pointer-invalid markers Andi Kleen
2005-11-10 14:25                           ` Jan Beulich
2005-11-10 13:21                       ` [PATCH 18/39] NLKD/x86-64 - INT1/INT3 handling changes Andi Kleen
2005-11-10 14:07                         ` Jan Beulich
2005-11-10 14:25                           ` Andi Kleen
2005-11-10 15:00                             ` Jan Beulich
2005-11-11  3:39                               ` [discuss] " Andi Kleen
2005-11-10 13:19                     ` [PATCH 13/39] NLKD/x86-64 - time adjustment Andi Kleen
2005-11-10 14:23                       ` Jan Beulich
2005-11-11  2:12                         ` Andi Kleen
2005-11-12  9:22                           ` Vojtech Pavlik
2005-11-12 17:21                             ` Andi Kleen
2005-11-12 20:44                               ` Vojtech Pavlik
2005-11-15  0:38                                 ` George Anzinger
2005-11-15  1:05                                   ` [discuss] " Andi Kleen
2005-11-15  7:50                                     ` Vojtech Pavlik
2005-11-15  8:24                                       ` Jan Beulich
2005-11-10 14:43                       ` Vojtech Pavlik
2005-11-09 14:09                   ` [PATCH 14/39] NLKD - kernel trace buffer access Jan Beulich
2005-11-09 14:09                     ` [PATCH 15/39] NLKD - early pseudo-fs Jan Beulich
2005-11-09 14:11                       ` [PATCH 16/39] NLKD - core adjustments Jan Beulich
2005-11-09 14:11                         ` [PATCH 17/39] NLKD/i386 " Jan Beulich
2005-11-09 19:00                           ` Adrian Bunk
2005-11-10  8:04                             ` Jan Beulich
2005-11-10 10:29                               ` Adrian Bunk
2005-11-10 11:52                                 ` Jan Beulich
2005-11-10 12:36                                   ` Lars Marowsky-Bree
2005-11-09 14:18                         ` [PATCH 22/39] NLKD - core Jan Beulich
2005-11-09 14:19                           ` [PATCH 23/39] NLKD/x86 " Jan Beulich
2005-11-09 14:20                             ` [PATCH 24/39] NLKD/i386 " Jan Beulich
2005-11-09 14:21                             ` [PATCH 25/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:30                               ` Andi Kleen
2005-11-09 14:22                           ` Jan Beulich [this message]
2005-11-09 14:23                             ` [PATCH 27/39] NLKD/i386 - run time library Jan Beulich
2005-11-09 14:23                               ` [PATCH 28/39] NLKD/x86-64 " Jan Beulich
2005-11-10 13:32                                 ` Andi Kleen
     [not found]                             ` <437214B7.76F0.0078.0@novell.com>
     [not found]                               ` <4372156A.76F0.0078.0@novell.com>
2005-11-09 14:28                                 ` [PATCH 34/39] NLKD/x86 - Console Debug Agent Jan Beulich
     [not found]                                 ` <43721600.76F0.0078.0@novell.com>
2005-11-09 14:30                                   ` [PATCH 38/39] NLKD/i386 - Remote " Jan Beulich
2005-11-09 14:31                                   ` [PATCH 39/39] NLKD/x86-64 " Jan Beulich
2005-11-09 14:29                       ` [PATCH 15/39] NLKD - early pseudo-fs Al Viro
2005-11-09 14:37                         ` Jan Beulich
2005-11-09 15:00                           ` Al Viro
2005-11-09 16:00                             ` Jan Beulich
2005-11-10  5:44                     ` [PATCH 14/39] NLKD - kernel trace buffer access Keith Owens
2005-11-10  8:02                       ` Jan Beulich
2005-11-09 18:51                   ` [PATCH 11/39] NLKD - time adjustment George Anzinger
2005-11-09 16:50         ` [PATCH 6/39] NLKD - early panic notification Greg KH
2005-11-09 16:45       ` [PATCH 3/39] NLKD - early/late CPU up/down notification Greg KH
2005-11-09 17:09         ` Jan Beulich
2005-11-09 17:19           ` Greg KH
2005-11-10  7:41             ` Jan Beulich
2005-11-10 20:59               ` Sam Ravnborg
2005-11-11  7:52                 ` Jan Beulich
2005-11-12 20:52                   ` Randy.Dunlap
2005-11-10 23:01               ` Greg KH
2005-11-11 10:06     ` [PATCH 2/39] NLKD - an alternative early ioremap approach Pavel Machek
2005-11-11 10:19       ` Jan Beulich
2005-11-09 16:50   ` [PATCH 1/39] NLKD - an alternative kallsyms approach Randy.Dunlap
2005-11-09 16:57     ` Greg KH
2005-11-09 17:20     ` Jan Beulich
2005-11-09 16:59 ` [PATCH 0/39] NLKD - Novell Linux Kernel Debugger Jeff Garzik
2005-11-09 17:06   ` Randy.Dunlap
2005-11-09 17:14     ` Jan Beulich
2005-11-09 17:56       ` Alan Cox
2005-11-09 18:05       ` Greg KH
2005-11-09 18:54       ` Paul Jackson
2005-11-10 12:41       ` Christoph Hellwig
2005-11-13  1:09     ` Andi Kleen
2005-11-13  2:53       ` jmerkey
2005-11-13  3:44         ` Andi Kleen
2005-11-13  3:26           ` Jeff V. Merkey
2005-11-13  3:32             ` Jeff V. Merkey
2005-11-09 17:53   ` Alan Cox
2005-11-09 16:25     ` Jeffrey V. Merkey
2005-11-10 14:48     ` Mark Lord
2005-11-10 15:28       ` Tom Rini
2005-11-10 16:37       ` Alan Cox
2005-11-13  1:11       ` Andi Kleen
     [not found] ` <437214E4.76F0.0078.0@novell.com>
     [not found]   ` <4372153C.76F0.0078.0@novell.com>
2005-11-10 13:33     ` [PATCH 32/39] NLKD/x86-64 - Core Debug Engine Andi Kleen

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=4372143F.76F0.0078.0@novell.com \
    --to=jbeulich@novell.com \
    --cc=linux-kernel@vger.kernel.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 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.