public inbox for linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox