parisc: Provide __ucmpdi2 to resolve undefined references in 32 bit builds.
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>
This commit is contained in:
committed by
Helge Deller
parent
0fbd06761f
commit
ca0ad83da1
@@ -120,11 +120,13 @@ extern void __ashrdi3(void);
|
|||||||
extern void __ashldi3(void);
|
extern void __ashldi3(void);
|
||||||
extern void __lshrdi3(void);
|
extern void __lshrdi3(void);
|
||||||
extern void __muldi3(void);
|
extern void __muldi3(void);
|
||||||
|
extern void __ucmpdi2(void);
|
||||||
|
|
||||||
EXPORT_SYMBOL(__ashrdi3);
|
EXPORT_SYMBOL(__ashrdi3);
|
||||||
EXPORT_SYMBOL(__ashldi3);
|
EXPORT_SYMBOL(__ashldi3);
|
||||||
EXPORT_SYMBOL(__lshrdi3);
|
EXPORT_SYMBOL(__lshrdi3);
|
||||||
EXPORT_SYMBOL(__muldi3);
|
EXPORT_SYMBOL(__muldi3);
|
||||||
|
EXPORT_SYMBOL(__ucmpdi2);
|
||||||
|
|
||||||
asmlinkage void * __canonicalize_funcptr_for_compare(void *);
|
asmlinkage void * __canonicalize_funcptr_for_compare(void *);
|
||||||
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
|
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
# Makefile for parisc-specific library files
|
# 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
|
obj-y := iomap.o
|
||||||
|
25
arch/parisc/lib/ucmpdi2.c
Normal file
25
arch/parisc/lib/ucmpdi2.c
Normal file
@@ -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;
|
||||||
|
}
|
Reference in New Issue
Block a user