mirror of
https://gitlab.com/sortix/sortix.git
synced 2023-02-13 20:55:38 -05:00
Use libgcc.
This commit is contained in:
parent
83ecf895d7
commit
24c89ec673
2 changed files with 4 additions and 123 deletions
120
libmaxsi/c++.cpp
120
libmaxsi/c++.cpp
|
@ -28,123 +28,3 @@ extern "C" void __attribute__ ((weak)) __cxa_pure_virtual()
|
||||||
{
|
{
|
||||||
// This shouldn't happen. TODO: Possibly crash the kernel here.
|
// This shouldn't happen. TODO: Possibly crash the kernel here.
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__i386__)
|
|
||||||
|
|
||||||
extern "C" uint64_t __attribute__ ((weak)) __udivdi3(uint64_t a, uint64_t b)
|
|
||||||
{
|
|
||||||
uint64_t result = 0;
|
|
||||||
uint64_t power = 1;
|
|
||||||
uint64_t remainder = a;
|
|
||||||
uint64_t divisor = b;
|
|
||||||
while ( divisor * 2 <= remainder )
|
|
||||||
{
|
|
||||||
power *= 2;
|
|
||||||
divisor *= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( divisor <= remainder )
|
|
||||||
{
|
|
||||||
remainder -= divisor;
|
|
||||||
result += power;
|
|
||||||
while ( power > 1 && remainder < divisor )
|
|
||||||
{
|
|
||||||
divisor /= 2;
|
|
||||||
power /= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" uint64_t __attribute__ ((weak)) __umoddi3(uint64_t a, uint64_t b)
|
|
||||||
{
|
|
||||||
uint64_t result = 0;
|
|
||||||
uint64_t power = 1;
|
|
||||||
uint64_t remainder = a;
|
|
||||||
uint64_t divisor = b;
|
|
||||||
while ( divisor * 2 <= remainder )
|
|
||||||
{
|
|
||||||
power *= 2;
|
|
||||||
divisor *= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ( divisor <= remainder )
|
|
||||||
{
|
|
||||||
remainder -= divisor;
|
|
||||||
result += power;
|
|
||||||
while ( power > 1 && remainder < divisor )
|
|
||||||
{
|
|
||||||
divisor /= 2;
|
|
||||||
power /= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return remainder;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" int64_t __attribute__ ((weak)) __divdi3(int64_t a, int64_t b)
|
|
||||||
{
|
|
||||||
if ( a >= 0 && b >= 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = a;
|
|
||||||
uint64_t denom = b;
|
|
||||||
uint64_t result = __udivdi3(numer, denom);
|
|
||||||
return +((int64_t) result);
|
|
||||||
}
|
|
||||||
else if ( a < 0 && b >= 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = -a;
|
|
||||||
uint64_t denom = b;
|
|
||||||
uint64_t result = __udivdi3(numer, denom);
|
|
||||||
return -((int64_t) result);
|
|
||||||
}
|
|
||||||
else if ( a >= 0 && b < 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = a;
|
|
||||||
uint64_t denom = -b;
|
|
||||||
uint64_t result = __udivdi3(numer, denom);
|
|
||||||
return -((int64_t) result);
|
|
||||||
}
|
|
||||||
else // if ( a < 0 && b < 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = -a;
|
|
||||||
uint64_t denom = -b;
|
|
||||||
uint64_t result = __udivdi3(numer, denom);
|
|
||||||
return +((int64_t) result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" int64_t __attribute__ ((weak)) __moddi3(int64_t a, int64_t b)
|
|
||||||
{
|
|
||||||
if ( a >= 0 && b >= 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = a;
|
|
||||||
uint64_t denom = b;
|
|
||||||
uint64_t result = __umoddi3(numer, denom);
|
|
||||||
return +((int64_t) result);
|
|
||||||
}
|
|
||||||
else if ( a < 0 && b >= 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = -a;
|
|
||||||
uint64_t denom = b;
|
|
||||||
uint64_t result = __umoddi3(numer, denom);
|
|
||||||
return -((int64_t) result);
|
|
||||||
}
|
|
||||||
else if ( a >= 0 && b < 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = a;
|
|
||||||
uint64_t denom = -b;
|
|
||||||
uint64_t result = __umoddi3(numer, denom);
|
|
||||||
return +((int64_t) result);
|
|
||||||
}
|
|
||||||
else // if ( a < 0 && b < 0 )
|
|
||||||
{
|
|
||||||
uint64_t numer = -a;
|
|
||||||
uint64_t denom = -b;
|
|
||||||
uint64_t result = __umoddi3(numer, denom);
|
|
||||||
return -((int64_t) result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ ifeq ($(CPU),x64)
|
||||||
BUILDID=x64
|
BUILDID=x64
|
||||||
X86FAMILY=1
|
X86FAMILY=1
|
||||||
CPUFLAGS=-ffreestanding -mno-red-zone
|
CPUFLAGS=-ffreestanding -mno-red-zone
|
||||||
CPULDFLAGS=-z max-page-size=0x1000
|
CPULDFLAGS=
|
||||||
CPUNASMFLAGS=-felf64
|
CPUNASMFLAGS=-felf64
|
||||||
CPUOBJS:=$(CPU)/base.o $(CPU)/x64.o
|
CPUOBJS:=$(CPU)/base.o $(CPU)/x64.o
|
||||||
endif
|
endif
|
||||||
|
@ -79,6 +79,7 @@ NASMFLAGS=$(CPUNASMFLAGS)
|
||||||
|
|
||||||
STATICLIBS=\
|
STATICLIBS=\
|
||||||
-lc-sortix \
|
-lc-sortix \
|
||||||
|
-lgcc \
|
||||||
|
|
||||||
HEADERDIRS:=$(shell find include -type d)
|
HEADERDIRS:=$(shell find include -type d)
|
||||||
HEADERS:=$(shell find include -type f)
|
HEADERS:=$(shell find include -type f)
|
||||||
|
@ -156,13 +157,13 @@ x64/boot.o: x64/boot.s
|
||||||
$(HOSTAS) -64 $< -o $@
|
$(HOSTAS) -64 $< -o $@
|
||||||
|
|
||||||
sortix-x64.tmp: $(ALLOBJS) x64/boot.o
|
sortix-x64.tmp: $(ALLOBJS) x64/boot.o
|
||||||
$(HOSTLD) -N -melf_x86_64_sortix -Ttext 100000 -o sortix-x64-internal.out x64/boot.o $(OBJS) $(STATICLIBS) end.o
|
$(HOSTCXX) -nodefaultlibs -nostartfiles -Wl,-N -Wl,-melf_x86_64_sortix -Wl,-Ttext -Wl,100000 -Wl,-z -Wl,max-page-size=0x1000 -o sortix-x64-internal.out x64/boot.o $(OBJS) $(STATICLIBS) end.o
|
||||||
$(HOSTOBJCOPY) sortix-x64-internal.out -O elf32-i386 sortix-x64.tmp
|
$(HOSTOBJCOPY) sortix-x64-internal.out -O elf32-i386 sortix-x64.tmp
|
||||||
|
|
||||||
# x86 compilation
|
# x86 compilation
|
||||||
|
|
||||||
sortix-x86.tmp: $(ALLOBJS)
|
sortix-x86.tmp: $(ALLOBJS)
|
||||||
$(HOSTLD) -melf_i386_sortix -Ttext 100000 -o $@ $(OBJS) $(STATICLIBS) end.o
|
$(HOSTCXX) -nodefaultlibs -nostartfiles -Wl,-melf_i386_sortix -Wl,-Ttext -Wl,100000 -o $@ $(OBJS) $(STATICLIBS) end.o
|
||||||
|
|
||||||
# general rules
|
# general rules
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue