Skip to content

Commit 5499882

Browse files
committed
Merge pull request #10756 from JuliaLang/tk/asm-no-openlibm
Decouple setjmp and longjmp assembly from openlibm headers
2 parents 438e90b + ddb1afc commit 5499882

7 files changed

+217
-54
lines changed

src/support/END.h

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*-
2+
* Copyright (c) 1990 The Regents of the University of California.
3+
* All rights reserved.
4+
*
5+
* This code is derived from software contributed to Berkeley by
6+
* William Jolitz.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions
10+
* are met:
11+
* 1. Redistributions of source code must retain the above copyright
12+
* notice, this list of conditions and the following disclaimer.
13+
* 2. Redistributions in binary form must reproduce the above copyright
14+
* notice, this list of conditions and the following disclaimer in the
15+
* documentation and/or other materials provided with the distribution.
16+
* 4. Neither the name of the University nor the names of its contributors
17+
* may be used to endorse or promote products derived from this software
18+
* without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
* SUCH DAMAGE.
31+
*
32+
* from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90
33+
* $FreeBSD: src/sys/i386/include/asm.h,v 1.14 2007/08/22 04:26:07 jkoshy Exp $
34+
*/
35+
36+
#if defined(__linux__) || defined(__FreeBSD__) || defined(__ELF__)
37+
.size CNAME, . - CNAME
38+
#else
39+
#ifndef _MSC_VER
40+
.end
41+
#else
42+
CNAME endp
43+
end
44+
#endif
45+
#endif
46+
47+
#undef CNAME
48+
#undef HIDENAME
49+
#undef STR
50+
#undef XSTR
51+
#undef _START_ENTRY
52+
#ifndef __APPLE__
53+
#undef EXT_
54+
#undef EXT
55+
#endif

src/support/ENTRY.amd64.h

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*-
2+
* Copyright (c) 1990 The Regents of the University of California.
3+
* All rights reserved.
4+
*
5+
* This code is derived from software contributed to Berkeley by
6+
* William Jolitz.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions
10+
* are met:
11+
* 1. Redistributions of source code must retain the above copyright
12+
* notice, this list of conditions and the following disclaimer.
13+
* 2. Redistributions in binary form must reproduce the above copyright
14+
* notice, this list of conditions and the following disclaimer in the
15+
* documentation and/or other materials provided with the distribution.
16+
* 4. Neither the name of the University nor the names of its contributors
17+
* may be used to endorse or promote products derived from this software
18+
* without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
* SUCH DAMAGE.
31+
*
32+
* from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90
33+
* $FreeBSD: src/sys/amd64/include/asm.h,v 1.18 2007/08/22 04:26:07 jkoshy Exp $
34+
*/
35+
36+
#define _START_ENTRY .p2align 4,0x90
37+
#define STR(csym) #csym
38+
#define XSTR(csym) STR(csym)
39+
#if defined(__linux__) || defined(__FreeBSD__) || defined(__ELF__)
40+
#ifndef __APPLE__
41+
#define EXT_(csym) csym
42+
#define EXT(csym) EXT_(csym)
43+
#endif
44+
#define HIDENAME(asmsym) .asmsym
45+
.text
46+
_START_ENTRY
47+
.globl EXT(CNAME)
48+
.type EXT(CNAME),@function
49+
EXT(CNAME):
50+
51+
#elif defined(_WIN32)
52+
#define EXT_(csym) csym
53+
#define EXT(csym) EXT_(csym)
54+
#define HIDENAME(asmsym) .asmsym
55+
56+
#ifndef _MSC_VER
57+
.intel_syntax noprefix
58+
.text
59+
_START_ENTRY
60+
.globl EXT(CNAME)
61+
.section .drectve
62+
.ascii " -export:" XSTR(CNAME)
63+
.section .text
64+
.def EXT(CNAME)
65+
.scl 2
66+
.type 32
67+
.endef
68+
EXT(CNAME):
69+
#else
70+
.code
71+
CNAME proc
72+
#endif
73+
74+
#endif

src/support/ENTRY.i387.h

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*-
2+
* Copyright (c) 1990 The Regents of the University of California.
3+
* All rights reserved.
4+
*
5+
* This code is derived from software contributed to Berkeley by
6+
* William Jolitz.
7+
*
8+
* Redistribution and use in source and binary forms, with or without
9+
* modification, are permitted provided that the following conditions
10+
* are met:
11+
* 1. Redistributions of source code must retain the above copyright
12+
* notice, this list of conditions and the following disclaimer.
13+
* 2. Redistributions in binary form must reproduce the above copyright
14+
* notice, this list of conditions and the following disclaimer in the
15+
* documentation and/or other materials provided with the distribution.
16+
* 4. Neither the name of the University nor the names of its contributors
17+
* may be used to endorse or promote products derived from this software
18+
* without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23+
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26+
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30+
* SUCH DAMAGE.
31+
*
32+
* from: @(#)DEFS.h 5.1 (Berkeley) 4/23/90
33+
* $FreeBSD: src/sys/i386/include/asm.h,v 1.14 2007/08/22 04:26:07 jkoshy Exp $
34+
*/
35+
36+
#define _START_ENTRY .p2align 2,0x90
37+
#define STR(csym) #csym
38+
#define XSTR(csym) STR(csym)
39+
#if defined(__linux__) || defined(__FreeBSD__) || defined(__ELF__)
40+
#ifndef __APPLE__
41+
#define EXT_(csym) csym
42+
#define EXT(csym) EXT_(csym)
43+
#endif
44+
#define HIDENAME(asmsym) .asmsym
45+
.text
46+
_START_ENTRY
47+
.globl EXT(CNAME)
48+
.type EXT(CNAME),@function
49+
EXT(CNAME):
50+
51+
#elif defined(_WIN32)
52+
#define EXT_(csym) _##csym
53+
#define EXT(csym) EXT_(csym)
54+
#define HIDENAME(asmsym) .asmsym
55+
56+
#ifndef _MSC_VER
57+
.intel_syntax
58+
.text
59+
_START_ENTRY
60+
.globl EXT(CNAME)
61+
.section .drectve
62+
.ascii " -export:" XSTR(CNAME)
63+
.section .text
64+
.def EXT(CNAME)
65+
.scl 2
66+
.type 32
67+
.endef
68+
EXT(CNAME):
69+
#else
70+
.586
71+
.model small,C
72+
.code
73+
CNAME proc
74+
#endif
75+
76+
#endif

src/support/_longjmp.win32.S

+3-14
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
RCSID("$NetBSD: _setjmp.S,v 1.8 2005/10/05 20:18:12 christos Exp $")
4040
#endif
4141
*/
42-
#include "../../deps/openlibm/i387/bsd_asm.h"
4342

4443
/*
4544
* C library -- _setjmp, _longjmp
@@ -51,15 +50,8 @@
5150
* The previous signal state is NOT restored.
5251
*/
5352

54-
#ifndef _MSC_VER
55-
.intel_syntax
56-
ENTRY(jl_longjmp)
57-
#else
58-
.586
59-
.model small,C
60-
.code
61-
jl_longjmp proc
62-
#endif
53+
#define CNAME jl_longjmp
54+
#include "ENTRY.i387.h"
6355
mov edx,DWORD PTR [esp+4]
6456
mov eax,DWORD PTR [esp+8]
6557
mov ebp,DWORD PTR [edx+0]
@@ -73,7 +65,4 @@ jl_longjmp proc
7365
inc eax
7466
a: mov DWORD PTR [esp],ecx
7567
ret
76-
#ifdef _MSC_VER
77-
jl_longjmp endp
78-
#endif
79-
END(jl_longjmp)
68+
#include "END.h"

src/support/_longjmp.win64.S

+3-13
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
1-
#include "../../deps/openlibm/amd64/bsd_asm.h"
2-
3-
#ifndef _MSC_VER
4-
.intel_syntax noprefix
5-
ENTRY(jl_longjmp)
6-
#else
7-
.code
8-
jl_longjmp proc
9-
#endif
1+
#define CNAME jl_longjmp
2+
#include "ENTRY.amd64.h"
103
mov rbx,QWORD PTR [rcx+8]
114
mov rsp,QWORD PTR [rcx+16]
125
mov rbp,QWORD PTR [rcx+24]
@@ -33,7 +26,4 @@ jl_longjmp proc
3326
inc eax
3427
a: mov QWORD PTR [rsp],r8
3528
ret
36-
#ifdef _MSC_VER
37-
jl_longjmp endp
38-
#endif
39-
END(jl_longjmp)
29+
#include "END.h"

src/support/_setjmp.win32.S

+3-14
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
RCSID("$NetBSD: _setjmp.S,v 1.8 2005/10/05 20:18:12 christos Exp $")
4040
#endif
4141
*/
42-
#include "../../deps/openlibm/i387/bsd_asm.h"
4342

4443
/*
4544
* C library -- _setjmp, _longjmp
@@ -51,15 +50,8 @@
5150
* The previous signal state is NOT restored.
5251
*/
5352

54-
#ifndef _MSC_VER
55-
.intel_syntax
56-
ENTRY(jl_setjmp)
57-
#else
58-
.586
59-
.model small,C
60-
.code
61-
jl_setjmp proc
62-
#endif
53+
#define CNAME jl_setjmp
54+
#include "ENTRY.i387.h"
6355
mov eax,DWORD PTR [esp+4]
6456
mov edx,DWORD PTR [esp+0]
6557
mov DWORD PTR [eax+0],ebp /* rta */
@@ -70,7 +62,4 @@ jl_setjmp proc
7062
mov DWORD PTR [eax+20],edx
7163
xor eax,eax
7264
ret
73-
#ifdef _MSC_VER
74-
jl_setjmp endp
75-
#endif
76-
END(jl_setjmp)
65+
#include "END.h"

src/support/_setjmp.win64.S

+3-13
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
1-
#include "../../deps/openlibm/amd64/bsd_asm.h"
2-
3-
#ifndef _MSC_VER
4-
.intel_syntax noprefix
5-
ENTRY(jl_setjmp)
6-
#else
7-
.code
8-
jl_setjmp proc
9-
#endif
1+
#define CNAME jl_setjmp
2+
#include "ENTRY.amd64.h"
103
mov rdx,QWORD PTR [rsp]
114
mov QWORD PTR [rcx],0
125
mov QWORD PTR [rcx+8],rbx
@@ -32,7 +25,4 @@ jl_setjmp proc
3225
movaps XMMWORD PTR [rcx+240],xmm15
3326
xor rax,rax
3427
ret
35-
#ifdef _MSC_VER
36-
jl_setjmp endp
37-
#endif
38-
END(jl_setjmp)
28+
#include "END.h"

0 commit comments

Comments
 (0)