Skip to content

Commit

Permalink
Merge pull request #10756 from JuliaLang/tk/asm-no-openlibm
Browse files Browse the repository at this point in the history
Decouple setjmp and longjmp assembly from openlibm headers
  • Loading branch information
tkelman committed Apr 20, 2015
2 parents 438e90b + ddb1afc commit 5499882
Show file tree
Hide file tree
Showing 7 changed files with 217 additions and 54 deletions.
55 changes: 55 additions & 0 deletions src/support/END.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* William Jolitz.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90
* $FreeBSD: src/sys/i386/include/asm.h,v 1.14 2007/08/22 04:26:07 jkoshy Exp $
*/

#if defined(__linux__) || defined(__FreeBSD__) || defined(__ELF__)
.size CNAME, . - CNAME
#else
#ifndef _MSC_VER
.end
#else
CNAME endp
end
#endif
#endif

#undef CNAME
#undef HIDENAME
#undef STR
#undef XSTR
#undef _START_ENTRY
#ifndef __APPLE__
#undef EXT_
#undef EXT
#endif
74 changes: 74 additions & 0 deletions src/support/ENTRY.amd64.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* William Jolitz.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90
* $FreeBSD: src/sys/amd64/include/asm.h,v 1.18 2007/08/22 04:26:07 jkoshy Exp $
*/

#define _START_ENTRY .p2align 4,0x90
#define STR(csym) #csym
#define XSTR(csym) STR(csym)
#if defined(__linux__) || defined(__FreeBSD__) || defined(__ELF__)
#ifndef __APPLE__
#define EXT_(csym) csym
#define EXT(csym) EXT_(csym)
#endif
#define HIDENAME(asmsym) .asmsym
.text
_START_ENTRY
.globl EXT(CNAME)
.type EXT(CNAME),@function
EXT(CNAME):

#elif defined(_WIN32)
#define EXT_(csym) csym
#define EXT(csym) EXT_(csym)
#define HIDENAME(asmsym) .asmsym

#ifndef _MSC_VER
.intel_syntax noprefix
.text
_START_ENTRY
.globl EXT(CNAME)
.section .drectve
.ascii " -export:" XSTR(CNAME)
.section .text
.def EXT(CNAME)
.scl 2
.type 32
.endef
EXT(CNAME):
#else
.code
CNAME proc
#endif

#endif
76 changes: 76 additions & 0 deletions src/support/ENTRY.i387.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* William Jolitz.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90
* $FreeBSD: src/sys/i386/include/asm.h,v 1.14 2007/08/22 04:26:07 jkoshy Exp $
*/

#define _START_ENTRY .p2align 2,0x90
#define STR(csym) #csym
#define XSTR(csym) STR(csym)
#if defined(__linux__) || defined(__FreeBSD__) || defined(__ELF__)
#ifndef __APPLE__
#define EXT_(csym) csym
#define EXT(csym) EXT_(csym)
#endif
#define HIDENAME(asmsym) .asmsym
.text
_START_ENTRY
.globl EXT(CNAME)
.type EXT(CNAME),@function
EXT(CNAME):

#elif defined(_WIN32)
#define EXT_(csym) _##csym
#define EXT(csym) EXT_(csym)
#define HIDENAME(asmsym) .asmsym

#ifndef _MSC_VER
.intel_syntax
.text
_START_ENTRY
.globl EXT(CNAME)
.section .drectve
.ascii " -export:" XSTR(CNAME)
.section .text
.def EXT(CNAME)
.scl 2
.type 32
.endef
EXT(CNAME):
#else
.586
.model small,C
.code
CNAME proc
#endif

#endif
17 changes: 3 additions & 14 deletions src/support/_longjmp.win32.S
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
RCSID("$NetBSD: _setjmp.S,v 1.8 2005/10/05 20:18:12 christos Exp $")
#endif
*/
#include "../../deps/openlibm/i387/bsd_asm.h"

/*
* C library -- _setjmp, _longjmp
Expand All @@ -51,15 +50,8 @@
* The previous signal state is NOT restored.
*/

#ifndef _MSC_VER
.intel_syntax
ENTRY(jl_longjmp)
#else
.586
.model small,C
.code
jl_longjmp proc
#endif
#define CNAME jl_longjmp
#include "ENTRY.i387.h"
mov edx,DWORD PTR [esp+4]
mov eax,DWORD PTR [esp+8]
mov ebp,DWORD PTR [edx+0]
Expand All @@ -73,7 +65,4 @@ jl_longjmp proc
inc eax
a: mov DWORD PTR [esp],ecx
ret
#ifdef _MSC_VER
jl_longjmp endp
#endif
END(jl_longjmp)
#include "END.h"
16 changes: 3 additions & 13 deletions src/support/_longjmp.win64.S
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
#include "../../deps/openlibm/amd64/bsd_asm.h"

#ifndef _MSC_VER
.intel_syntax noprefix
ENTRY(jl_longjmp)
#else
.code
jl_longjmp proc
#endif
#define CNAME jl_longjmp
#include "ENTRY.amd64.h"
mov rbx,QWORD PTR [rcx+8]
mov rsp,QWORD PTR [rcx+16]
mov rbp,QWORD PTR [rcx+24]
Expand All @@ -33,7 +26,4 @@ jl_longjmp proc
inc eax
a: mov QWORD PTR [rsp],r8
ret
#ifdef _MSC_VER
jl_longjmp endp
#endif
END(jl_longjmp)
#include "END.h"
17 changes: 3 additions & 14 deletions src/support/_setjmp.win32.S
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
RCSID("$NetBSD: _setjmp.S,v 1.8 2005/10/05 20:18:12 christos Exp $")
#endif
*/
#include "../../deps/openlibm/i387/bsd_asm.h"

/*
* C library -- _setjmp, _longjmp
Expand All @@ -51,15 +50,8 @@
* The previous signal state is NOT restored.
*/

#ifndef _MSC_VER
.intel_syntax
ENTRY(jl_setjmp)
#else
.586
.model small,C
.code
jl_setjmp proc
#endif
#define CNAME jl_setjmp
#include "ENTRY.i387.h"
mov eax,DWORD PTR [esp+4]
mov edx,DWORD PTR [esp+0]
mov DWORD PTR [eax+0],ebp /* rta */
Expand All @@ -70,7 +62,4 @@ jl_setjmp proc
mov DWORD PTR [eax+20],edx
xor eax,eax
ret
#ifdef _MSC_VER
jl_setjmp endp
#endif
END(jl_setjmp)
#include "END.h"
16 changes: 3 additions & 13 deletions src/support/_setjmp.win64.S
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
#include "../../deps/openlibm/amd64/bsd_asm.h"

#ifndef _MSC_VER
.intel_syntax noprefix
ENTRY(jl_setjmp)
#else
.code
jl_setjmp proc
#endif
#define CNAME jl_setjmp
#include "ENTRY.amd64.h"
mov rdx,QWORD PTR [rsp]
mov QWORD PTR [rcx],0
mov QWORD PTR [rcx+8],rbx
Expand All @@ -32,7 +25,4 @@ jl_setjmp proc
movaps XMMWORD PTR [rcx+240],xmm15
xor rax,rax
ret
#ifdef _MSC_VER
jl_setjmp endp
#endif
END(jl_setjmp)
#include "END.h"

0 comments on commit 5499882

Please sign in to comment.