diff options
Diffstat (limited to 'sysdeps/mach/hurd')
-rw-r--r-- | sysdeps/mach/hurd/i386/____longjmp_chk.S | 9 | ||||
-rw-r--r-- | sysdeps/mach/hurd/i386/__longjmp.S | 9 |
2 files changed, 16 insertions, 2 deletions
diff --git a/sysdeps/mach/hurd/i386/____longjmp_chk.S b/sysdeps/mach/hurd/i386/____longjmp_chk.S index 4d3a331728..5131386c60 100644 --- a/sysdeps/mach/hurd/i386/____longjmp_chk.S +++ b/sysdeps/mach/hurd/i386/____longjmp_chk.S @@ -60,7 +60,14 @@ ENTRY (____longjmp_chk) PTR_DEMANGLE (%ecx) #endif - movl %gs:SIGSTATE_OFFSET,%edi + movw %ds, %si + movw %gs, %di + cmpw %si, %di + jz .Lok /* TLS not initialized yet */ + + movl %gs:SIGSTATE_OFFSET, %edi + testl %edi, %edi + jnz .Lok /* sigstate not initialized yet */ testl $SS_ONSTACK, (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)(%edi) jnz .Lonstack diff --git a/sysdeps/mach/hurd/i386/__longjmp.S b/sysdeps/mach/hurd/i386/__longjmp.S index d123c214c9..73bbff9826 100644 --- a/sysdeps/mach/hurd/i386/__longjmp.S +++ b/sysdeps/mach/hurd/i386/__longjmp.S @@ -38,7 +38,14 @@ ENTRY (__longjmp) PTR_DEMANGLE (%ecx) #endif - movl %gs:SIGSTATE_OFFSET,%edi + movw %ds, %si + movw %gs, %di + cmpw %si, %di + jz .Lok /* TLS not initialized yet */ + + movl %gs:SIGSTATE_OFFSET, %edi + testl %edi, %edi + jnz .Lok /* sigstate not initialized yet */ testl $SS_ONSTACK, (HURD_SIGSTATE__SIGALTSTACK__OFFSET + SIGALTSTACK__SS_FLAGS__OFFSET)(%edi) jz .Lok |