From bf613741f01c73f17cf1e1fbca8cd612fe25dcbc Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 5 Dec 2003 01:41:43 +0000 Subject: Apply a second fix for stack alignment with libkse. This time, enter the UTS with the stack correctly aligned. Also, while here, use an indirect jump rather than the pushq/ret hack. This fixes threaded apps that use floating point for me, although it hasn't solved all the problems. It is an improvement though. Preservation of the 128 byte red zone hasn't been resolved yet. Approved by: re (scottl) --- lib/libkse/arch/amd64/amd64/enter_uts.S | 4 ++-- lib/libpthread/arch/amd64/amd64/enter_uts.S | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/libkse/arch/amd64/amd64/enter_uts.S b/lib/libkse/arch/amd64/amd64/enter_uts.S index c263eab..7f9a88d 100644 --- a/lib/libkse/arch/amd64/amd64/enter_uts.S +++ b/lib/libkse/arch/amd64/amd64/enter_uts.S @@ -35,7 +35,7 @@ __FBSDID("$FreeBSD$"); ENTRY(_amd64_enter_uts) addq %rcx, %rdx /* get stack base */ andq $~0xf, %rdx /* align to 16 bytes */ + subq $8, %rdx /* simulate "call" alignment */ movq %rdx, %rsp /* switch to UTS stack */ movq %rdx, %rbp /* set frame */ - pushq %rsi - ret + jmpq *%rsi diff --git a/lib/libpthread/arch/amd64/amd64/enter_uts.S b/lib/libpthread/arch/amd64/amd64/enter_uts.S index c263eab..7f9a88d 100644 --- a/lib/libpthread/arch/amd64/amd64/enter_uts.S +++ b/lib/libpthread/arch/amd64/amd64/enter_uts.S @@ -35,7 +35,7 @@ __FBSDID("$FreeBSD$"); ENTRY(_amd64_enter_uts) addq %rcx, %rdx /* get stack base */ andq $~0xf, %rdx /* align to 16 bytes */ + subq $8, %rdx /* simulate "call" alignment */ movq %rdx, %rsp /* switch to UTS stack */ movq %rdx, %rbp /* set frame */ - pushq %rsi - ret + jmpq *%rsi -- cgit v1.1