From 5158bee08cab9b6484ed5d455f1b6b7023e65ecd Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 8 Feb 2019 01:24:52 +0100 Subject: [PATCH] Don't use -mregparm=3 in userspace. It's pretty comfy having arguments in registers in the kernel for now though. --- Clock/Makefile | 2 +- FontEditor/Makefile | 2 +- Launcher/Launcher | Bin 67092 -> 67172 bytes Launcher/Makefile | 2 +- LibC/.gitignore | 1 + LibC/Makefile | 16 ++++++++++------ LibC/setjmp.asm | 33 +++++++++++++++++++++++++++++++++ LibC/setjmp.cpp | 35 ----------------------------------- LibGUI/Makefile | 2 +- Terminal/Makefile | 2 +- Userland/Makefile | 2 +- 11 files changed, 50 insertions(+), 47 deletions(-) create mode 100644 LibC/setjmp.asm delete mode 100644 LibC/setjmp.cpp diff --git a/Clock/Makefile b/Clock/Makefile index 1123db515b..60431e8279 100644 --- a/Clock/Makefile +++ b/Clock/Makefile @@ -8,7 +8,7 @@ ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -FLAVOR_FLAGS = -march=i386 -mregparm=3 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic +FLAVOR_FLAGS = -march=i386 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. -I../LibC diff --git a/FontEditor/Makefile b/FontEditor/Makefile index 27d976d494..e80b0620ea 100644 --- a/FontEditor/Makefile +++ b/FontEditor/Makefile @@ -8,7 +8,7 @@ ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -FLAVOR_FLAGS = -march=i386 -mregparm=3 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic +FLAVOR_FLAGS = -march=i386 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. -I../LibC diff --git a/Launcher/Launcher b/Launcher/Launcher index d0a35e2e364078058263323f6abf69bff465aae2..80b31262b4d845560aff9b3ebac06cc5936b79ec 100755 GIT binary patch literal 67172 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 a>_g+w=MVVDKX?7R-?V<@zmb30bN>hZ%)s3M diff --git a/Launcher/Makefile b/Launcher/Makefile index 29b4322700..60c143b40b 100644 --- a/Launcher/Makefile +++ b/Launcher/Makefile @@ -7,7 +7,7 @@ ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -FLAVOR_FLAGS = -march=i386 -mregparm=3 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic +FLAVOR_FLAGS = -march=i386 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. -I../LibC diff --git a/LibC/.gitignore b/LibC/.gitignore index 196c9f02af..5191909171 100644 --- a/LibC/.gitignore +++ b/LibC/.gitignore @@ -1,3 +1,4 @@ *.o +*.no *.d LibC.a diff --git a/LibC/Makefile b/LibC/Makefile index e44257aacb..3254a55339 100644 --- a/LibC/Makefile +++ b/LibC/Makefile @@ -31,7 +31,6 @@ LIBC_OBJS = \ grp.o \ times.o \ termcap.o \ - setjmp.o \ stat.o \ mntent.o \ ctype.o \ @@ -47,14 +46,16 @@ LIBC_OBJS = \ poll.o \ entry.o -OBJS = $(AK_OBJS) $(WIDGETS_OBJS) $(LIBC_OBJS) $(SHAREDGRAPHICS_OBJS) +ASM_OBJS = setjmp.no + +CPP_OBJS = $(AK_OBJS) $(WIDGETS_OBJS) $(LIBC_OBJS) $(SHAREDGRAPHICS_OBJS) LIBRARY = LibC.a ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc LIBC_FLAGS = -ffreestanding -fno-stack-protector -fno-ident WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -FLAVOR_FLAGS = -fomit-frame-pointer -mregparm=3 -march=i386 -m32 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic +FLAVOR_FLAGS = -fomit-frame-pointer -march=i386 -m32 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic OPTIMIZATION_FLAGS = -O2 -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. @@ -68,14 +69,17 @@ LDFLAGS = -T linker.ld --strip-debug -melf_i386 --gc-sections all: $(LIBRARY) -$(LIBRARY): $(OBJS) - @echo "LIB $@"; $(AR) rcs $@ $(OBJS) +$(LIBRARY): $(CPP_OBJS) $(ASM_OBJS) + @echo "LIB $@"; $(AR) rcs $@ $(CPP_OBJS) $(ASM_OBJS) .cpp.o: @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< +%.no: %.asm + @echo "NASM $@"; nasm -f elf -o $@ $< + -include $(OBJS:%.o=%.d) clean: - @echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d + @echo "CLEAN"; rm -f $(LIBRARY) $(CPP_OBJS) $(ASM_OBJS) *.d diff --git a/LibC/setjmp.asm b/LibC/setjmp.asm new file mode 100644 index 0000000000..7f1f13feec --- /dev/null +++ b/LibC/setjmp.asm @@ -0,0 +1,33 @@ +; asmsyntax=nasm + +global setjmp +setjmp: + mov eax, [esp + 4] + mov [eax * 4], ebx + mov [eax + 1 * 4], esi + mov [eax + 2 * 4], edi + mov [eax + 3 * 4], ebp + lea ecx, [esp + 4] + mov [eax + 4 * 4], ecx + mov ecx, [esp] + mov [eax + 5 * 4], ecx + xor eax, eax + ret + +global longjmp +longjmp: + mov edx, [esp + 4] + mov eax, [esp + 8] + mov ebx, [edx * 4] + mov esi, [edx + 1 * 4] + mov edi, [edx + 2 * 4] + mov ebp, [edx + 3 * 4] + mov ecx, [edx + 4 * 4] + mov esp, ecx + mov ecx, [edx + 5 * 4] + test eax, eax + jnz .nonzero + mov eax, 1 +.nonzero: + jmp ecx + diff --git a/LibC/setjmp.cpp b/LibC/setjmp.cpp deleted file mode 100644 index 57b864f79c..0000000000 --- a/LibC/setjmp.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include -#include - -asm( -".globl setjmp\n\ -setjmp:\n\ - movl %ebx, 0(%eax)\n\ - movl %esi, 4(%eax)\n\ - movl %edi, 8(%eax)\n\ - movl %ebp, 12(%eax)\n\ - movl %esp, 16(%eax)\n\ - movl (%esp), %ecx\n\ - movl %ecx, 20(%eax)\n\ - xorl %eax, %eax\n\ - ret\n\ -"); - -asm( -".globl longjmp\n\ -longjmp:\n\ - xchgl %edx, %eax\n\ - test %eax, %eax\n\ - jnz 1f\n\ - incl %eax\n\ -1:\n\ - mov 0(%edx), %ebx\n\ - mov 4(%edx), %esi\n\ - mov 8(%edx), %edi\n\ - mov 12(%edx), %ebp\n\ - mov 16(%edx), %ecx\n\ - mov %ecx, %esp\n\ - mov 20(%edx), %ecx\n\ - jmp *%ecx\n\ -"); diff --git a/LibGUI/Makefile b/LibGUI/Makefile index f90e7398f8..6d1dc21472 100644 --- a/LibGUI/Makefile +++ b/LibGUI/Makefile @@ -26,7 +26,7 @@ ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc LIBC_FLAGS = -ffreestanding -fno-stack-protector -fno-ident WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -FLAVOR_FLAGS = -fomit-frame-pointer -mregparm=3 -march=i386 -m32 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic +FLAVOR_FLAGS = -fomit-frame-pointer -march=i386 -m32 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I../LibC -I.. -I. diff --git a/Terminal/Makefile b/Terminal/Makefile index c8c0faf712..9b448b9055 100644 --- a/Terminal/Makefile +++ b/Terminal/Makefile @@ -8,7 +8,7 @@ ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -FLAVOR_FLAGS = -march=i386 -mregparm=3 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic +FLAVOR_FLAGS = -march=i386 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. -I../LibC diff --git a/Userland/Makefile b/Userland/Makefile index 4893210c38..a21cbe9610 100644 --- a/Userland/Makefile +++ b/Userland/Makefile @@ -65,7 +65,7 @@ ARCH_FLAGS = STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib -nostdinc USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings -FLAVOR_FLAGS = -march=i386 -mregparm=3 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic +FLAVOR_FLAGS = -march=i386 -m32 -fno-exceptions -fno-rtti -fmerge-all-constants -fno-unroll-loops -fno-pie -fno-pic OPTIMIZATION_FLAGS = -Oz -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. -I../LibC