Skip to content

Commit

Permalink
parisc: Provide __ucmpdi2 to resolve undefined references in 32 bit b…
Browse files Browse the repository at this point in the history
…uilds.

The Debian experimental linux source package (3.8.5-1) build fails
with the following errors:
...
MODPOST 2016 modules
ERROR: "__ucmpdi2" [fs/btrfs/btrfs.ko] undefined!
ERROR: "__ucmpdi2" [drivers/md/dm-verity.ko] undefined!

The attached patch resolves this problem.  It is based on the s390
implementation of ucmpdi2.c.

Signed-off-by: John David Anglin <dave.anglin@bell.net>
Cc: "James E.J. Bottomley" <jejb@parisc-linux.org>
Signed-off-by: Helge Deller <deller@gmx.de>
  • Loading branch information
John David Anglin authored and Helge Deller committed Apr 25, 2013
1 parent 0fbd067 commit ca0ad83
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
2 changes: 2 additions & 0 deletions arch/parisc/kernel/parisc_ksyms.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,13 @@ extern void __ashrdi3(void);
extern void __ashldi3(void);
extern void __lshrdi3(void);
extern void __muldi3(void);
extern void __ucmpdi2(void);

EXPORT_SYMBOL(__ashrdi3);
EXPORT_SYMBOL(__ashldi3);
EXPORT_SYMBOL(__lshrdi3);
EXPORT_SYMBOL(__muldi3);
EXPORT_SYMBOL(__ucmpdi2);

asmlinkage void * __canonicalize_funcptr_for_compare(void *);
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
Expand Down
3 changes: 2 additions & 1 deletion arch/parisc/lib/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Makefile for parisc-specific library files
#

lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \
ucmpdi2.o

obj-y := iomap.o
25 changes: 25 additions & 0 deletions arch/parisc/lib/ucmpdi2.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <linux/module.h>

union ull_union {
unsigned long long ull;
struct {
unsigned int high;
unsigned int low;
} ui;
};

int __ucmpdi2(unsigned long long a, unsigned long long b)
{
union ull_union au = {.ull = a};
union ull_union bu = {.ull = b};

if (au.ui.high < bu.ui.high)
return 0;
else if (au.ui.high > bu.ui.high)
return 2;
if (au.ui.low < bu.ui.low)
return 0;
else if (au.ui.low > bu.ui.low)
return 2;
return 1;
}

0 comments on commit ca0ad83

Please sign in to comment.