All of lore.kernel.org
 help / color / mirror / Atom feed
* div, udiv, mul, umul, rem, urem broken again?!?
@ 2005-10-05 22:10 Tom 'spot' Callaway
  2005-10-05 22:17 ` Tom 'spot' Callaway
                   ` (15 more replies)
  0 siblings, 16 replies; 17+ messages in thread
From: Tom 'spot' Callaway @ 2005-10-05 22:10 UTC (permalink / raw)
  To: sparclinux

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

Built 2.6.14-rc3-git4 today for sparc32 and I got pages of this from
depmod -aeF /boot/System.map-2.6.13-1.1594sp1 2.6.13-1.1594sp1:

WARNING: /lib/modules/2.6.13-1.1594sp1/kernel/sound/sparc/snd-sun-dbri.ko needs unknown symbol udiv
WARNING: /lib/modules/2.6.13-1.1594sp1/kernel/sound/sparc/snd-sun-dbri.ko needs unknown symbol div
WARNING: /lib/modules/2.6.13-1.1594sp1/kernel/sound/sparc/snd-sun-dbri.ko needs unknown symbol urem
WARNING: /lib/modules/2.6.13-1.1594sp1/kernel/sound/sparc/snd-sun-dbri.ko needs unknown symbol rem
WARNING: /lib/modules/2.6.13-1.1594sp1/kernel/sound/sparc/snd-sun-dbri.ko needs unknown symbol umul

Not just for dbri, but for pretty much everything built as a module. I
tested the latest revision of module-utils to see if it made any
difference, and it did not.

This looks like it tracks to:
http://kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7caaeabb17758295edff9703c18a840073c5b8f4

Unfortunately, depmod had a workaround case for .* symbols, and it is
now seems to be broken for these sparc symbols. I worked up the attached
patch to resolve the issue, but I'm not sure if it is the most correct
way to fix it.

~spot
-- 
Tom "spot" Callaway: Red Hat Senior Sales Engineer || GPG ID: 93054260
Fedora Extras Steering Committee Member (RPM Standards and Practices)
Aurora Linux Project Leader: http://auroralinux.org
Lemurs, llamas, and sparcs, oh my!

[-- Attachment #2: module-init-tools-3.2-sparc.patch --]
[-- Type: text/x-patch, Size: 1449 bytes --]

--- module-init-tools-3.2-pre9/depmod.c.BAD	2005-10-05 17:10:39.026053905 -0400
+++ module-init-tools-3.2-pre9/depmod.c	2005-10-05 18:09:11.354098881 -0400
@@ -103,10 +103,24 @@ void add_symbol(const char *name, struct
 
 static int print_unknown;
 
-struct module *find_symbol(const char *name, const char *modname, int weak)
+struct module *find_symbol(char *name, const char *modname, int weak)
 {
 	struct symbol *s;
 
+	/* Handle the wacky sparc cases */
+	if (strcmp(name, ".div") == 0)
+		strncpy(name, "_Div", sizeof(name));
+	if (strcmp(name, ".udiv") == 0)
+		strncpy(name, "_Udiv", sizeof(name));
+	if (strcmp(name, ".mul") == 0)
+		strncpy(name, "_Mul", sizeof(name));
+	if (strcmp(name, ".umul") == 0)
+		strncpy(name, "_Umul", sizeof(name));
+	if (strcmp(name, ".rem") == 0)
+		strncpy(name, "_Rem", sizeof(name));
+	if (strcmp(name, ".urem") == 0)
+		strncpy(name, "_Urem", sizeof(name));
+
 	/* For our purposes, .foo matches foo.  PPC64 needs this. */
 	if (name[0] == '.')
 		name++;
--- module-init-tools-3.2-pre9/moduleops_core.c.BAD	2005-10-05 18:10:18.321918225 -0400
+++ module-init-tools-3.2-pre9/moduleops_core.c	2005-10-05 18:10:12.533798153 -0400
@@ -118,7 +118,7 @@ static void PERBIT(calculate_deps)(struc
 	for (i = 1; i < size / sizeof(syms[0]); i++) {
 		if (END(syms[i].st_shndx, module->conv) == SHN_UNDEF) {
 			/* Look for symbol */
-			const char *name;
+			char *name;
 			struct module *owner;
 			int weak;
 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
@ 2005-10-05 22:17 ` Tom 'spot' Callaway
  2005-10-06  0:24 ` David S. Miller
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Tom 'spot' Callaway @ 2005-10-05 22:17 UTC (permalink / raw)
  To: sparclinux

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


I accidentally sent a broken version of this patch, the attached version works.

~spot
-- 
Tom "spot" Callaway: Red Hat Senior Sales Engineer || GPG ID: 93054260
Fedora Extras Steering Committee Member (RPM Standards and Practices)
Aurora Linux Project Leader: http://auroralinux.org
Lemurs, llamas, and sparcs, oh my!

[-- Attachment #2: module-init-tools-3.2-sparc.patch --]
[-- Type: text/x-patch, Size: 2024 bytes --]

--- module-init-tools-3.2-pre9/depmod.c.BAD	2005-10-05 17:10:39.026053905 -0400
+++ module-init-tools-3.2-pre9/depmod.c	2005-10-05 18:09:11.354098881 -0400
@@ -103,10 +103,24 @@ void add_symbol(const char *name, struct
 
 static int print_unknown;
 
-struct module *find_symbol(const char *name, const char *modname, int weak)
+struct module *find_symbol(char *name, const char *modname, int weak)
 {
 	struct symbol *s;
 
+	/* Handle the wacky sparc cases */
+	if (strcmp(name, ".div") == 0)
+		strncpy(name, "_Div", sizeof(name));
+	if (strcmp(name, ".udiv") == 0)
+		strncpy(name, "_Udiv", sizeof(name));
+	if (strcmp(name, ".mul") == 0)
+		strncpy(name, "_Mul", sizeof(name));
+	if (strcmp(name, ".umul") == 0)
+		strncpy(name, "_Umul", sizeof(name));
+	if (strcmp(name, ".rem") == 0)
+		strncpy(name, "_Rem", sizeof(name));
+	if (strcmp(name, ".urem") == 0)
+		strncpy(name, "_Urem", sizeof(name));
+
 	/* For our purposes, .foo matches foo.  PPC64 needs this. */
 	if (name[0] == '.')
 		name++;
--- module-init-tools-3.2-pre9/moduleops_core.c.BAD	2005-10-05 18:10:18.321918225 -0400
+++ module-init-tools-3.2-pre9/moduleops_core.c	2005-10-05 18:10:12.533798153 -0400
@@ -118,7 +118,7 @@ static void PERBIT(calculate_deps)(struc
 	for (i = 1; i < size / sizeof(syms[0]); i++) {
 		if (END(syms[i].st_shndx, module->conv) == SHN_UNDEF) {
 			/* Look for symbol */
-			const char *name;
+			char *name;
 			struct module *owner;
 			int weak;
 
--- module-init-tools-3.2-pre9/depmod.h.BAD	2005-10-05 18:19:53.451485241 -0400
+++ module-init-tools-3.2-pre9/depmod.h	2005-10-05 18:19:58.472721897 -0400
@@ -12,7 +12,7 @@ void *do_nofail(void *ptr, const char *f
 #define NOFAIL(ptr)	do_nofail((ptr), __FILE__, __LINE__, #ptr)
 
 void add_symbol(const char *name, struct module *owner);
-struct module *find_symbol(const char *name, const char *modname, int weak);
+struct module *find_symbol(char *name, const char *modname, int weak);
 void add_dep(struct module *mod, struct module *depends_on);
 
 /* I hate strcmp. */

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
  2005-10-05 22:17 ` Tom 'spot' Callaway
@ 2005-10-06  0:24 ` David S. Miller
  2005-10-06 13:21 ` Tom 'spot' Callaway
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: David S. Miller @ 2005-10-06  0:24 UTC (permalink / raw)
  To: sparclinux

From: "Tom 'spot' Callaway" <tcallawa@redhat.com>
Date: Wed, 05 Oct 2005 17:10:54 -0500

> 7caaeabb17758295edff9703c18a840073c5b8f4

This change should cause us to lookup ".[a-z]*" symbols
as "_[A-Z]*", as per the change made in handle_modversions()
in scripts/mod/modpost.c

So when a module references ".udiv" that symbol reference
should get rewritten to "_Udiv" and that latter symbol is
what we actually export from the kernel.

As best as I can tell, what is needed is similar logic in
depmod.  Ie. something like:

+ 			if (symname[0] = '.') {
+ 				char *munged = strdup(symname);
+ 				munged[0] = '_';
+ 				munged[1] = toupper(munged[1]);
+ 				symname = munged;
+ 			}

I see you just hardcoded the various ".*" symbol names Sparc
uses in your patch.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
  2005-10-05 22:17 ` Tom 'spot' Callaway
  2005-10-06  0:24 ` David S. Miller
@ 2005-10-06 13:21 ` Tom 'spot' Callaway
  2005-10-10 10:20 ` Rusty Russell
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Tom 'spot' Callaway @ 2005-10-06 13:21 UTC (permalink / raw)
  To: sparclinux

On Wed, 2005-10-05 at 17:24 -0700, David S. Miller wrote:
> From: "Tom 'spot' Callaway" <tcallawa@redhat.com>
> Date: Wed, 05 Oct 2005 17:10:54 -0500
> 
> > 7caaeabb17758295edff9703c18a840073c5b8f4
> 
> This change should cause us to lookup ".[a-z]*" symbols
> as "_[A-Z]*", as per the change made in handle_modversions()
> in scripts/mod/modpost.c
> 
> So when a module references ".udiv" that symbol reference
> should get rewritten to "_Udiv" and that latter symbol is
> what we actually export from the kernel.
> 
> As best as I can tell, what is needed is similar logic in
> depmod.  Ie. something like:
> 
> + 			if (symname[0] = '.') {
> + 				char *munged = strdup(symname);
> + 				munged[0] = '_';
> + 				munged[1] = toupper(munged[1]);
> + 				symname = munged;
> + 			}
> 
> I see you just hardcoded the various ".*" symbol names Sparc
> uses in your patch.

My concern was the comment around the existing routine in the depmod
code:

/* For our purposes, .foo matches foo.  PPC64 needs this. */
        if (name[0] = '.')
                name++;

If PPC64 still needs this, we can't just munge to the _<upper> condition
universally, we still need some mechanism of identifying whether we want
the PPC64 behavior for dot symbols or the sparc32 behavior for dot
symbols. By hardcoding the six sparc specific symbols, and changing them
first, we ensure that the PPC64 case still works.

I can shorten it a little bit by doing:

        /* Handle the wacky sparc cases */
        if (strcmp(name, ".div") = 0) || (strcmp(name, ".udiv") = 0)
|| (strcmp(name, ".mul") = 0)
           (strcmp(name, ".umul") = 0) || (strcmp(name, ".rem") = 0)
|| (strcmp(name, ".urem") = 0) {
                char *munged = strdup(name);
                munged[0] = '_';
                toupper(munged[1]);
                name = munged;
        }

But we'd still have to hardcode the names.

Of course, all of this is moot if the PPC64 is munging their dot symbols
in the same way.

~spot
-- 
Tom "spot" Callaway: Red Hat Senior Sales Engineer || GPG ID: 93054260
Fedora Extras Steering Committee Member (RPM Standards and Practices)
Aurora Linux Project Leader: http://auroralinux.org
Lemurs, llamas, and sparcs, oh my!


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (2 preceding siblings ...)
  2005-10-06 13:21 ` Tom 'spot' Callaway
@ 2005-10-10 10:20 ` Rusty Russell
  2005-10-10 14:35 ` Tom 'spot' Callaway
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Rusty Russell @ 2005-10-10 10:20 UTC (permalink / raw)
  To: sparclinux

On Thu, 2005-10-06 at 08:21 -0500, Tom 'spot' Callaway wrote:
> On Wed, 2005-10-05 at 17:24 -0700, David S. Miller wrote:
> > From: "Tom 'spot' Callaway" <tcallawa@redhat.com>
> > Date: Wed, 05 Oct 2005 17:10:54 -0500
> > 
> > > 7caaeabb17758295edff9703c18a840073c5b8f4
> > 
> > This change should cause us to lookup ".[a-z]*" symbols
> > as "_[A-Z]*", as per the change made in handle_modversions()
> > in scripts/mod/modpost.c
> > 
> > So when a module references ".udiv" that symbol reference
> > should get rewritten to "_Udiv" and that latter symbol is
> > what we actually export from the kernel.
> > 
> > As best as I can tell, what is needed is similar logic in
> > depmod.  Ie. something like:
> > 
> > + 			if (symname[0] = '.') {
> > + 				char *munged = strdup(symname);
> > + 				munged[0] = '_';
> > + 				munged[1] = toupper(munged[1]);
> > + 				symname = munged;
> > + 			}
> > 
> > I see you just hardcoded the various ".*" symbol names Sparc
> > uses in your patch.
> 
> My concern was the comment around the existing routine in the depmod
> code:
> 
> /* For our purposes, .foo matches foo.  PPC64 needs this. */
>         if (name[0] = '.')
>                 name++;
> 
> If PPC64 still needs this, we can't just munge to the _<upper> condition
> universally, we still need some mechanism of identifying whether we want
> the PPC64 behavior for dot symbols or the sparc32 behavior for dot
> symbols. By hardcoding the six sparc specific symbols, and changing them
> first, we ensure that the PPC64 case still works.

Anton CC'd.  I think you can and should fix this within sparc32
arch-specific code by creating a macro which can export a symbol by a
different name, eg: (untested)

#define __EXPORT_SPECIAL_SYMBOL(name, sym) \
	static const char __kstrtab_##name[]			\
	__attribute__((section("__ksymtab_strings")))		\
	= MODULE_SYMBOL_PREFIX #name;    			\
	static const struct kernel_symbol __ksymtab_##name	\
	__attribute_used__					\
	__attribute__((section("__ksymtab"), unused))	\
	= { (unsigned long)&sym, __kstrtab_##name }

Note, PPC64 still needs the dot hack because it changes the name of
*every* function symbol.

Cheers,
Rusty.
-- 
A bad analogy is like a leaky screwdriver -- Richard Braakman


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (3 preceding siblings ...)
  2005-10-10 10:20 ` Rusty Russell
@ 2005-10-10 14:35 ` Tom 'spot' Callaway
  2005-10-10 18:22 ` David S. Miller
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Tom 'spot' Callaway @ 2005-10-10 14:35 UTC (permalink / raw)
  To: sparclinux

On Mon, 2005-10-10 at 20:20 +1000, Rusty Russell wrote:

> #define __EXPORT_SPECIAL_SYMBOL(name, sym) \
> 	static const char __kstrtab_##name[]			\
> 	__attribute__((section("__ksymtab_strings")))		\
> 	= MODULE_SYMBOL_PREFIX #name;    			\
> 	static const struct kernel_symbol __ksymtab_##name	\
> 	__attribute_used__					\
> 	__attribute__((section("__ksymtab"), unused))	\
> 	= { (unsigned long)&sym, __kstrtab_##name }

Umm... isn't this how sparc used to do things? I think we're going in
circles here...

~spot
-- 
Tom "spot" Callaway: Red Hat Senior Sales Engineer || GPG ID: 93054260
Fedora Extras Steering Committee Member (RPM Standards and Practices)
Aurora Linux Project Leader: http://auroralinux.org
Lemurs, llamas, and sparcs, oh my!


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (4 preceding siblings ...)
  2005-10-10 14:35 ` Tom 'spot' Callaway
@ 2005-10-10 18:22 ` David S. Miller
  2005-10-11 10:03 ` Rusty Russell
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: David S. Miller @ 2005-10-10 18:22 UTC (permalink / raw)
  To: sparclinux

From: Rusty Russell <rusty@rustcorp.com.au>
Date: Mon, 10 Oct 2005 20:20:52 +1000

> #define __EXPORT_SPECIAL_SYMBOL(name, sym) \
> 	static const char __kstrtab_##name[]			\
> 	__attribute__((section("__ksymtab_strings")))		\
> 	= MODULE_SYMBOL_PREFIX #name;    			\
> 	static const struct kernel_symbol __ksymtab_##name	\
> 	__attribute_used__					\
> 	__attribute__((section("__ksymtab"), unused))	\
> 	= { (unsigned long)&sym, __kstrtab_##name }
> 
> Note, PPC64 still needs the dot hack because it changes the name of
> *every* function symbol.

The reason we did the ".foo" --> "_Foo" transformation was
exactly because we didn't want to do crap like this any more.

It's error prone, and is nearly impossible to get working with
every version of the compiler.

Why don't we just put an ifdef __sparc__ thing into modutils
which understands the ".foo" --> "_Foo" translation?

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (5 preceding siblings ...)
  2005-10-10 18:22 ` David S. Miller
@ 2005-10-11 10:03 ` Rusty Russell
  2005-11-06  0:40 ` David S. Miller
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Rusty Russell @ 2005-10-11 10:03 UTC (permalink / raw)
  To: sparclinux

On Mon, 2005-10-10 at 11:22 -0700, David S. Miller wrote:
> From: Rusty Russell <rusty@rustcorp.com.au>
> Date: Mon, 10 Oct 2005 20:20:52 +1000
> 
> > #define __EXPORT_SPECIAL_SYMBOL(name, sym) \
> > 	static const char __kstrtab_##name[]			\
> > 	__attribute__((section("__ksymtab_strings")))		\
> > 	= MODULE_SYMBOL_PREFIX #name;    			\
> > 	static const struct kernel_symbol __ksymtab_##name	\
> > 	__attribute_used__					\
> > 	__attribute__((section("__ksymtab"), unused))	\
> > 	= { (unsigned long)&sym, __kstrtab_##name }
> > 
> > Note, PPC64 still needs the dot hack because it changes the name of
> > *every* function symbol.
> 
> The reason we did the ".foo" --> "_Foo" transformation was
> exactly because we didn't want to do crap like this any more.
> 
> It's error prone, and is nearly impossible to get working with
> every version of the compiler.
> 
> Why don't we just put an ifdef __sparc__ thing into modutils
> which understands the ".foo" --> "_Foo" translation?

Um.  We could do that.  It's not clear to me why putting it in modutils
will make it less "error prone" or portable.  Exporting symbol with
correct name need only be done in one place.  Mangling needs to be done
in three places (where it's exported, modprobe.c, and modutils).

The only reasons we can't export symbols like ".div" are (1) because the
export macros use the symbol names to build temporary unique variable
names.  This is merely an implementation detail in the EXPORT_SYMBOL
macro (we could use __LINE__ instead).

And (2) for PPC64, we put in the "ignore ." hack.  Everyone used to be
happy with that, so it wasn't made PPC64 specific.  In retrospect, that
was a mistake.

Look, I don't *actually* care.  Send me whatever hack patch you want for
sparc modutils.  Then wait for me to do a new module-init-tools release
to sync up.  Repeat every time you change your mind.

Rusty.
-- 
A bad analogy is like a leaky screwdriver -- Richard Braakman


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (6 preceding siblings ...)
  2005-10-11 10:03 ` Rusty Russell
@ 2005-11-06  0:40 ` David S. Miller
  2005-11-06  4:13 ` Tom 'spot' Callaway
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: David S. Miller @ 2005-11-06  0:40 UTC (permalink / raw)
  To: sparclinux

From: Rusty Russell <rusty@rustcorp.com.au>
Date: Tue, 11 Oct 2005 20:03:36 +1000

> > > #define __EXPORT_SPECIAL_SYMBOL(name, sym) \
> > > 	static const char __kstrtab_##name[]			\
> > > 	__attribute__((section("__ksymtab_strings")))		\
> > > 	= MODULE_SYMBOL_PREFIX #name;    			\
> > > 	static const struct kernel_symbol __ksymtab_##name	\
> > > 	__attribute_used__					\
> > > 	__attribute__((section("__ksymtab"), unused))	\
> > > 	= { (unsigned long)&sym, __kstrtab_##name }
> > > 
> > > Note, PPC64 still needs the dot hack because it changes the name of
> > > *every* function symbol.

How is this special export macro supposed to work?

I think I missed the idea whilst trying to implement
your suggestion, as below, but it will not compile:

  CC      arch/sparc/kernel/sparc_ksyms.o
arch/sparc/kernel/sparc_ksyms.c:306: error: parse error before '.' token
arch/sparc/kernel/sparc_ksyms.c:307: error: initializer element is not constant
 ... etc. etc.

diff --git a/arch/sparc/kernel/module.c b/arch/sparc/kernel/module.c
index 787d5f1..122ec88 100644
--- a/arch/sparc/kernel/module.c
+++ b/arch/sparc/kernel/module.c
@@ -10,7 +10,6 @@
 #include <linux/vmalloc.h>
 #include <linux/fs.h>
 #include <linux/string.h>
-#include <linux/ctype.h>
 
 void *module_alloc(unsigned long size)
 {
@@ -37,9 +36,7 @@ void module_free(struct module *mod, voi
            table entries. */
 }
 
-/* Make generic code ignore STT_REGISTER dummy undefined symbols,
- * and replace references to .func with _Func
- */
+/* Make generic code ignore STT_REGISTER dummy undefined symbols.  */
 int module_frob_arch_sections(Elf_Ehdr *hdr,
 			      Elf_Shdr *sechdrs,
 			      char *secstrings,
@@ -63,13 +60,6 @@ int module_frob_arch_sections(Elf_Ehdr *
 		if (sym[i].st_shndx = SHN_UNDEF) {
 			if (ELF32_ST_TYPE(sym[i].st_info) = STT_REGISTER)
 				sym[i].st_shndx = SHN_ABS;
-			else {
-				char *name = strtab + sym[i].st_name;
-				if (name[0] = '.') {
-					name[0] = '_';
-					name[1] = toupper(name[1]);
-				}
-			}
 		}
 	}
 	return 0;
diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c
index 1c8fd0f..ec42853 100644
--- a/arch/sparc/kernel/sparc_ksyms.c
+++ b/arch/sparc/kernel/sparc_ksyms.c
@@ -94,16 +94,6 @@ extern void ___rw_read_enter(void);
 extern void ___rw_read_exit(void);
 extern void ___rw_write_enter(void);
 
-/* Alias functions whose names begin with "." and export the aliases.
- * The module references will be fixed up by module_frob_arch_sections.
- */
-extern int _Div(int, int);
-extern int _Mul(int, int);
-extern int _Rem(int, int);
-extern unsigned _Udiv(unsigned, unsigned);
-extern unsigned _Umul(unsigned, unsigned);
-extern unsigned _Urem(unsigned, unsigned);
-
 /* used by various drivers */
 EXPORT_SYMBOL(sparc_cpu_model);
 EXPORT_SYMBOL(kernel_thread);
@@ -313,12 +303,12 @@ EXPORT_SYMBOL(__lshrdi3);
 EXPORT_SYMBOL(__muldi3);
 EXPORT_SYMBOL(__divdi3);
 
-EXPORT_SYMBOL(_Rem);
-EXPORT_SYMBOL(_Urem);
-EXPORT_SYMBOL(_Mul);
-EXPORT_SYMBOL(_Umul);
-EXPORT_SYMBOL(_Div);
-EXPORT_SYMBOL(_Udiv);
+__EXPORT_SPECIAL_SYMBOL(rem, .rem);
+__EXPORT_SPECIAL_SYMBOL(urem, urem);
+__EXPORT_SPECIAL_SYMBOL(mul, .mul);
+__EXPORT_SPECIAL_SYMBOL(umul, .umul);
+__EXPORT_SPECIAL_SYMBOL(div, .div);
+__EXPORT_SPECIAL_SYMBOL(udiv, .udiv);
 
 #ifdef CONFIG_DEBUG_BUGVERBOSE
 EXPORT_SYMBOL(do_BUG);
diff --git a/arch/sparc/lib/mul.S b/arch/sparc/lib/mul.S
index da69356..83dffbc 100644
--- a/arch/sparc/lib/mul.S
+++ b/arch/sparc/lib/mul.S
@@ -16,9 +16,7 @@
  */
 
 	.globl .mul
-	.globl _Mul
 .mul:
-_Mul:	/* needed for export */
 	mov	%o0, %y		! multiplier -> Y
 	andncc	%o0, 0xfff, %g0	! test bits 12..31
 	be	Lmul_shortway	! if zero, can do it the short way
diff --git a/arch/sparc/lib/rem.S b/arch/sparc/lib/rem.S
index bf015a9..4450814 100644
--- a/arch/sparc/lib/rem.S
+++ b/arch/sparc/lib/rem.S
@@ -43,9 +43,7 @@
 
 
 	.globl .rem
-	.globl _Rem
 .rem:
-_Rem:	/* needed for export */
 	! compute sign of result; if neither is negative, no problem
 	orcc	%o1, %o0, %g0	! either negative?
 	bge	2f			! no, go do the divide
diff --git a/arch/sparc/lib/sdiv.S b/arch/sparc/lib/sdiv.S
index af94516..e0ad80b 100644
--- a/arch/sparc/lib/sdiv.S
+++ b/arch/sparc/lib/sdiv.S
@@ -43,9 +43,7 @@
 
 
 	.globl .div
-	.globl _Div
 .div:
-_Div:	/* needed for export */
 	! compute sign of result; if neither is negative, no problem
 	orcc	%o1, %o0, %g0	! either negative?
 	bge	2f			! no, go do the divide
diff --git a/arch/sparc/lib/udiv.S b/arch/sparc/lib/udiv.S
index 169e01d..2abfc6b 100644
--- a/arch/sparc/lib/udiv.S
+++ b/arch/sparc/lib/udiv.S
@@ -43,9 +43,7 @@
 
 
 	.globl .udiv
-	.globl _Udiv
 .udiv:
-_Udiv:	/* needed for export */
 
 	! Ready to divide.  Compute size of quotient; scale comparand.
 	orcc	%o1, %g0, %o5
diff --git a/arch/sparc/lib/umul.S b/arch/sparc/lib/umul.S
index f0e5b20..a784720 100644
--- a/arch/sparc/lib/umul.S
+++ b/arch/sparc/lib/umul.S
@@ -21,9 +21,7 @@
  */
 
 	.globl .umul
-	.globl _Umul
 .umul:
-_Umul:	/* needed for export */
 	or	%o0, %o1, %o4
 	mov	%o0, %y		! multiplier -> Y
 
diff --git a/arch/sparc/lib/urem.S b/arch/sparc/lib/urem.S
index 6b92bdc..ec7f0c5 100644
--- a/arch/sparc/lib/urem.S
+++ b/arch/sparc/lib/urem.S
@@ -41,9 +41,7 @@
  */
 
 	.globl .urem
-	.globl _Urem
 .urem:
-_Urem:	/* needed for export */
 
 	! Ready to divide.  Compute size of quotient; scale comparand.
 	orcc	%o1, %g0, %o5
diff --git a/include/linux/module.h b/include/linux/module.h
index 84d75f3..2ef36d1 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -198,6 +198,15 @@ void *__symbol_get_gpl(const char *symbo
 #define EXPORT_SYMBOL_GPL(sym)					\
 	__EXPORT_SYMBOL(sym, "_gpl")
 
+#define __EXPORT_SPECIAL_SYMBOL(name, sym) 			\
+	static const char __kstrtab_##name[]			\
+	__attribute__((section("__ksymtab_strings")))		\
+	= MODULE_SYMBOL_PREFIX #name;    			\
+	static const struct kernel_symbol __ksymtab_##name	\
+	__attribute_used__					\
+	__attribute__((section("__ksymtab"), unused))		\
+	= { (unsigned long)&sym, __kstrtab_##name }
+
 #endif
 
 struct module_ref
@@ -441,6 +450,7 @@ void module_remove_driver(struct device_
 #else /* !CONFIG_MODULES... */
 #define EXPORT_SYMBOL(sym)
 #define EXPORT_SYMBOL_GPL(sym)
+#define __EXPORT_SPECIAL_SYMBOL(name, sym)
 
 /* Given an address, look for it in the exception tables. */
 static inline const struct exception_table_entry *
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 3bed09e..09ffca5 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -370,12 +370,6 @@ handle_modversions(struct module *mod, s
 			/* Ignore register directives. */
 			if (ELF_ST_TYPE(sym->st_info) = STT_SPARC_REGISTER)
 				break;
- 			if (symname[0] = '.') {
- 				char *munged = strdup(symname);
- 				munged[0] = '_';
- 				munged[1] = toupper(munged[1]);
- 				symname = munged;
- 			}
 		}
 #endif
 		


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (7 preceding siblings ...)
  2005-11-06  0:40 ` David S. Miller
@ 2005-11-06  4:13 ` Tom 'spot' Callaway
  2005-11-06  6:27 ` Rusty Russell
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Tom 'spot' Callaway @ 2005-11-06  4:13 UTC (permalink / raw)
  To: sparclinux

On Sat, 2005-11-05 at 16:40 -0800, David S. Miller wrote:

> I think I missed the idea whilst trying to implement
> your suggestion, as below, but it will not compile:

Whoever "fixes" this issue, please test with module-init-tools as part
of the confirmation process. It's never fun to discover that kernel
modules just don't work.

~spot
-- 
Tom "spot" Callaway: Red Hat Senior Sales Engineer || GPG ID: 93054260
Fedora Extras Steering Committee Member (RPM Standards and Practices)
Aurora Linux Project Leader: http://auroralinux.org
Lemurs, llamas, and sparcs, oh my!


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (8 preceding siblings ...)
  2005-11-06  4:13 ` Tom 'spot' Callaway
@ 2005-11-06  6:27 ` Rusty Russell
  2005-11-06 20:56 ` David S. Miller
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Rusty Russell @ 2005-11-06  6:27 UTC (permalink / raw)
  To: sparclinux

On Sat, 2005-11-05 at 16:40 -0800, David S. Miller wrote:
> From: Rusty Russell <rusty@rustcorp.com.au>
> Date: Tue, 11 Oct 2005 20:03:36 +1000
> 
> > > > #define __EXPORT_SPECIAL_SYMBOL(name, sym) \
> > > > 	static const char __kstrtab_##name[]			\
> > > > 	__attribute__((section("__ksymtab_strings")))		\
> > > > 	= MODULE_SYMBOL_PREFIX #name;    			\
> > > > 	static const struct kernel_symbol __ksymtab_##name	\
> > > > 	__attribute_used__					\
> > > > 	__attribute__((section("__ksymtab"), unused))	\
> > > > 	= { (unsigned long)&sym, __kstrtab_##name }
> > > > 
> > > > Note, PPC64 still needs the dot hack because it changes the name of
> > > > *every* function symbol.
> 
> How is this special export macro supposed to work?

Argh, it would need to use the alias trick, yes.  As I said, untested.
But, looking in 2.6.12, sparc already did this aliasing?

So my question is (I missed the beginning of this thread), why do you
want to avoid the simple "omit the . at the front" name mangling scheme
which modpost, kernel/module.c and module-init-tools already understand,
and use a different mangling scheme?  Name clash with something else?
Why is "_Udiv" a better name than "udiv"?

And we shouldn't make it ifdef __sparc__ in module-init-tools anyway,
since depmod is supposed to be platform neutral.  Would have to be
special case on ELF header or on names.

Rusty.		
-- 
A bad analogy is like a leaky screwdriver -- Richard Braakman


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (9 preceding siblings ...)
  2005-11-06  6:27 ` Rusty Russell
@ 2005-11-06 20:56 ` David S. Miller
  2005-11-06 20:58 ` David S. Miller
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: David S. Miller @ 2005-11-06 20:56 UTC (permalink / raw)
  To: sparclinux

From: "Tom 'spot' Callaway" <tcallawa@redhat.com>
Date: Sat, 05 Nov 2005 22:13:39 -0600

> On Sat, 2005-11-05 at 16:40 -0800, David S. Miller wrote:
> 
> > I think I missed the idea whilst trying to implement
> > your suggestion, as below, but it will not compile:
> 
> Whoever "fixes" this issue, please test with module-init-tools as part
> of the confirmation process. It's never fun to discover that kernel
> modules just don't work.

If I do the work I'll send you a patch to test since I lack
any 32-bit sparc system on which to test this.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (10 preceding siblings ...)
  2005-11-06 20:56 ` David S. Miller
@ 2005-11-06 20:58 ` David S. Miller
  2006-02-08 20:25 ` Martin Habets
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: David S. Miller @ 2005-11-06 20:58 UTC (permalink / raw)
  To: sparclinux

From: Rusty Russell <rusty@rustcorp.com.au>
Date: Sun, 06 Nov 2005 17:27:20 +1100

> Argh, it would need to use the alias trick, yes.  As I said, untested.
> But, looking in 2.6.12, sparc already did this aliasing?

And that aliasing trick is what we were trying to get rid
of.  It's nearly impossible to get it to work on all versions
of the compiler at once.

I thought you had proposed a way to do it without aliases :-)

> So my question is (I missed the beginning of this thread), why do you
> want to avoid the simple "omit the . at the front" name mangling scheme
> which modpost, kernel/module.c and module-init-tools already understand,
> and use a different mangling scheme?  Name clash with something else?
> Why is "_Udiv" a better name than "udiv"?

Good question, I'll think about this some more.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (11 preceding siblings ...)
  2005-11-06 20:58 ` David S. Miller
@ 2006-02-08 20:25 ` Martin Habets
  2006-02-08 20:51 ` Tom 'spot' Callaway
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: Martin Habets @ 2006-02-08 20:25 UTC (permalink / raw)
  To: sparclinux

I tried to build 2.6.16-rc2 today, but got a lot of these
errors from depmod:

WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crypto_null.ko needs unknown symbol urem
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crypto_null.ko needs unknown symbol umul
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol udiv
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol div
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol urem
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol umul
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol udiv
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol div
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol urem
WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol umul

There was a long thread regarding this last october, but I did not find
a resolution.

My module-init-tools are version 3.2-pre1-2 (Debian).

Any tips/hints?
-- 
Martin
---------------------------------------------------------------------------
30 years from now GNU/Linux will be as redundant a term as MERT/UNIX is 
today. - Martin Habets
---------------------------------------------------------------------------

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (12 preceding siblings ...)
  2006-02-08 20:25 ` Martin Habets
@ 2006-02-08 20:51 ` Tom 'spot' Callaway
  2006-02-08 20:56 ` Al Viro
  2006-02-09  1:29 ` Rusty Russell
  15 siblings, 0 replies; 17+ messages in thread
From: Tom 'spot' Callaway @ 2006-02-08 20:51 UTC (permalink / raw)
  To: sparclinux

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

On Wed, 2006-02-08 at 20:25 +0000, Martin Habets wrote:
> I tried to build 2.6.16-rc2 today, but got a lot of these
> errors from depmod:
> 
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crypto_null.ko needs unknown symbol urem
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crypto_null.ko needs unknown symbol umul
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol udiv
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol div
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol urem
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol umul
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol udiv
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol div
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol urem
> WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol umul
> 
> There was a long thread regarding this last october, but I did not find
> a resolution.
> 
> My module-init-tools are version 3.2-pre1-2 (Debian).
> 
> Any tips/hints?

There was no consensus about the best way to fix this issue... so it
never got fixed.

The attached hack will get module-init-tools working on sparc (Aurora is
using this in lieu of an actual fix).

~spot
-- 
Tom "spot" Callaway: Red Hat Senior Sales Engineer || GPG ID: 93054260
Fedora Extras Steering Committee Member (RPM Standards and Practices)
Aurora Linux Project Leader: http://auroralinux.org
Lemurs, llamas, and sparcs, oh my!

[-- Attachment #2: module-init-tools-3.2-sparc.patch --]
[-- Type: text/x-patch, Size: 2024 bytes --]

--- module-init-tools-3.2-pre9/depmod.c.BAD	2005-10-05 17:10:39.026053905 -0400
+++ module-init-tools-3.2-pre9/depmod.c	2005-10-05 18:09:11.354098881 -0400
@@ -103,10 +103,24 @@ void add_symbol(const char *name, struct
 
 static int print_unknown;
 
-struct module *find_symbol(const char *name, const char *modname, int weak)
+struct module *find_symbol(char *name, const char *modname, int weak)
 {
 	struct symbol *s;
 
+	/* Handle the wacky sparc cases */
+	if (strcmp(name, ".div") == 0)
+		strncpy(name, "_Div", sizeof(name));
+	if (strcmp(name, ".udiv") == 0)
+		strncpy(name, "_Udiv", sizeof(name));
+	if (strcmp(name, ".mul") == 0)
+		strncpy(name, "_Mul", sizeof(name));
+	if (strcmp(name, ".umul") == 0)
+		strncpy(name, "_Umul", sizeof(name));
+	if (strcmp(name, ".rem") == 0)
+		strncpy(name, "_Rem", sizeof(name));
+	if (strcmp(name, ".urem") == 0)
+		strncpy(name, "_Urem", sizeof(name));
+
 	/* For our purposes, .foo matches foo.  PPC64 needs this. */
 	if (name[0] == '.')
 		name++;
--- module-init-tools-3.2-pre9/moduleops_core.c.BAD	2005-10-05 18:10:18.321918225 -0400
+++ module-init-tools-3.2-pre9/moduleops_core.c	2005-10-05 18:10:12.533798153 -0400
@@ -118,7 +118,7 @@ static void PERBIT(calculate_deps)(struc
 	for (i = 1; i < size / sizeof(syms[0]); i++) {
 		if (END(syms[i].st_shndx, module->conv) == SHN_UNDEF) {
 			/* Look for symbol */
-			const char *name;
+			char *name;
 			struct module *owner;
 			int weak;
 
--- module-init-tools-3.2-pre9/depmod.h.BAD	2005-10-05 18:19:53.451485241 -0400
+++ module-init-tools-3.2-pre9/depmod.h	2005-10-05 18:19:58.472721897 -0400
@@ -12,7 +12,7 @@ void *do_nofail(void *ptr, const char *f
 #define NOFAIL(ptr)	do_nofail((ptr), __FILE__, __LINE__, #ptr)
 
 void add_symbol(const char *name, struct module *owner);
-struct module *find_symbol(const char *name, const char *modname, int weak);
+struct module *find_symbol(char *name, const char *modname, int weak);
 void add_dep(struct module *mod, struct module *depends_on);
 
 /* I hate strcmp. */

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (13 preceding siblings ...)
  2006-02-08 20:51 ` Tom 'spot' Callaway
@ 2006-02-08 20:56 ` Al Viro
  2006-02-09  1:29 ` Rusty Russell
  15 siblings, 0 replies; 17+ messages in thread
From: Al Viro @ 2006-02-08 20:56 UTC (permalink / raw)
  To: sparclinux

FWIW, I'd do
	if (!strcmp(str, ".mul") || ..........) {
		str[0] = '_';
		str[1] = toupper(str[1]);
	}
instead...

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: div, udiv, mul, umul, rem, urem broken again?!?
  2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
                   ` (14 preceding siblings ...)
  2006-02-08 20:56 ` Al Viro
@ 2006-02-09  1:29 ` Rusty Russell
  15 siblings, 0 replies; 17+ messages in thread
From: Rusty Russell @ 2006-02-09  1:29 UTC (permalink / raw)
  To: sparclinux

On Wed, 2006-02-08 at 14:51 -0600, Tom 'spot' Callaway wrote:
> On Wed, 2006-02-08 at 20:25 +0000, Martin Habets wrote:
> > I tried to build 2.6.16-rc2 today, but got a lot of these
> > errors from depmod:
> > 
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crypto_null.ko needs unknown symbol urem
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crypto_null.ko needs unknown symbol umul
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol udiv
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol div
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol urem
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/crypto/crc32c.ko needs unknown symbol umul
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol udiv
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol div
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol urem
> > WARNING: /lib/modules/2.6.16-rc2-mph2/kernel/arch/sparc/kernel/led.ko needs unknown symbol umul
> > 
> > There was a long thread regarding this last october, but I did not find
> > a resolution.

(1) it's just a warning, and it doesn't actually effect anything.
(2) Someone decided to be clever in arch/sparc/kernel/sparc_ksyms.c
between 2.6.13 and 2.6.14.  Rather than mangle ".div" to "div", they
decided to mangle it to "_Div".  The problem is that depmod knows about
skipping the ".": it's done for other architectures.  It has no idea
about this new mangling.

2.6.12 did it the obvious way, 2.6.13 used asm, and 2.6.14 the new
scheme.  One wonders what was wrong with 2.6.12, but I haven't been
following closely.

Now, possibly there was a legitimate reason not to pollute the namespace
with these symbols, but they could probably have been made static
without great concern.

Hope that clarifies,
Rusty.
-- 
 ccontrol: http://ozlabs.org/~rusty/ccontrol


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2006-02-09  1:29 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-10-05 22:10 div, udiv, mul, umul, rem, urem broken again?!? Tom 'spot' Callaway
2005-10-05 22:17 ` Tom 'spot' Callaway
2005-10-06  0:24 ` David S. Miller
2005-10-06 13:21 ` Tom 'spot' Callaway
2005-10-10 10:20 ` Rusty Russell
2005-10-10 14:35 ` Tom 'spot' Callaway
2005-10-10 18:22 ` David S. Miller
2005-10-11 10:03 ` Rusty Russell
2005-11-06  0:40 ` David S. Miller
2005-11-06  4:13 ` Tom 'spot' Callaway
2005-11-06  6:27 ` Rusty Russell
2005-11-06 20:56 ` David S. Miller
2005-11-06 20:58 ` David S. Miller
2006-02-08 20:25 ` Martin Habets
2006-02-08 20:51 ` Tom 'spot' Callaway
2006-02-08 20:56 ` Al Viro
2006-02-09  1:29 ` Rusty Russell

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.