Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit efb80e7e authored by Kyle McMartin's avatar Kyle McMartin Committed by Kyle McMartin
Browse files

[PARISC] import necessary bits of libgcc.a



Currently we're hacking libs-y to include libgcc.a, but this has
unforeseen consequences since the userspace libgcc is linked with fpregs
enabled. We need the kernel to stop using fpregs in an uncontrolled manner
to implement lazy fpu state saves.

Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
parent 6f7d998e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ kernel-y := mm/ kernel/ math-emu/ kernel/init_task.o
kernel-$(CONFIG_HPUX)		+= hpux/

core-y	+= $(addprefix arch/parisc/, $(kernel-y))
libs-y	+= arch/parisc/lib/ `$(CC) -print-libgcc-file-name`
libs-y	+= arch/parisc/lib/

drivers-$(CONFIG_OPROFILE)		+= arch/parisc/oprofile/

+0 −22
Original line number Diff line number Diff line
@@ -122,31 +122,9 @@ EXPORT_SYMBOL($$divI_12);
EXPORT_SYMBOL($$divI_14);
EXPORT_SYMBOL($$divI_15);

extern void __ashrdi3(void);
extern void __ashldi3(void);
extern void __lshrdi3(void);
extern void __muldi3(void);

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

asmlinkage void * __canonicalize_funcptr_for_compare(void *);
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);

#ifdef CONFIG_64BIT
extern void __divdi3(void);
extern void __udivdi3(void);
extern void __umoddi3(void);
extern void __moddi3(void);

EXPORT_SYMBOL(__divdi3);
EXPORT_SYMBOL(__udivdi3);
EXPORT_SYMBOL(__umoddi3);
EXPORT_SYMBOL(__moddi3);
#endif

#ifndef CONFIG_64BIT
extern void $$dyncall(void);
EXPORT_SYMBOL($$dyncall);
+1 −1
Original line number Diff line number Diff line
@@ -4,4 +4,4 @@

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

obj-y	:= iomap.o
obj-y	:= libgcc/ milli/ iomap.o
+4 −0
Original line number Diff line number Diff line
obj-y	:= __ashldi3.o __ashrdi3.o __clzsi2.o __divdi3.o __divsi3.o	\
		__lshrdi3.o __moddi3.o __modsi3.o __udivdi3.o		\
		__udivmoddi4.o __udivmodsi4.o __udivsi3.o 		\
		__umoddi3.o __umodsi3.o __muldi3.o __umulsidi3.o
+19 −0
Original line number Diff line number Diff line
#include "libgcc.h"

u64 __ashldi3(u64 v, int cnt)
{
	int c = cnt & 31;
	u32 vl = (u32) v;
	u32 vh = (u32) (v >> 32);

	if (cnt & 32) {
		vh = (vl << c);
		vl = 0;
	} else {
		vh = (vh << c) + (vl >> (32 - c));
		vl = (vl << c);
	}

	return ((u64) vh << 32) + vl;
}
EXPORT_SYMBOL(__ashldi3);
Loading