summaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-i386/tls.exp
blob: 4c14a937419f0d65511b238691abd469620eaf75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Expect script for i386 TLS tests.
#   Copyright (C) 2016 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
#

# The following tests require running the executable generated by ld,
# or enough of a build environment to create a fully linked executable.
# This is not commonly available when testing a cross-built linker.
if ![isnative] {
    return
}

# Only on Linux for now.
if ![istarget "i?86-*-linux*"] {
    return
}

# Check to see if the C compiler works
if { [which $CC] == 0 } {
    return
}

run_cc_link_tests [list \
    [list \
	"Build tls-def1.o tls-main1.o" \
	"" \
	"-fPIE" \
	{tls-def1.c tls-main1.c} \
    ] \
    [list \
	"Build tls-gd1.o tls-ld1.o" \
	"" \
	"-fPIC -Wa,-mrelax-relocations=yes" \
	{tls-gd1.S tls-ld1.S} \
    ] \
    [list \
	"Build libtls-1a.so" \
	"-shared tmpdir/tls-def1.o" \
	"" \
	{dummy.s} \
	{} \
	"libtls-1a.so" \
    ] \
    [list \
	"Build libtls-1b.so" \
	"-shared tmpdir/tls-gd1.o tmpdir/tls-ld1.o" \
	"" \
	{dummy.s} \
	{} \
	"libtls-1b.so" \
    ] \
]

run_ld_link_exec_tests [list \
    [list \
	"TLS GD/LD -> LE transition without PLT (dynamic)" \
	"tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \
	 tmpdir/tls-ld1.o" \
	"" \
	{ dummy.s } \
	"tls-1a" \
	"pass.out" \
    ] \
    [list \
	"TLS GD/LD -> LE transition without PLT (PIE)" \
	"-pie tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \
	 tmpdir/tls-ld1.o" \
	"" \
	{ dummy.s } \
	"tls-1b" \
	"pass.out" \
    ] \
    [list \
	"TLS GD/LD -> LE transition without PLT (static)" \
	"-static tmpdir/tls-def1.o tmpdir/tls-main1.o tmpdir/tls-gd1.o \
	 tmpdir/tls-ld1.o" \
	"" \
	{ dummy.s } \
	"tls-1c" \
	"pass.out" \
    ] \
    [list \
	"TLS GD/LD -> IE transition without PLT" \
	"tmpdir/tls-main1.o tmpdir/tls-gd1.o tmpdir/tls-ld1.o \
	 tmpdir/libtls-1a.so -R tmpdir" \
	"" \
	{ dummy.s } \
	"tls-1d" \
	"pass.out" \
    ] \
    [list \
	"TLS without PLT (1)" \
	"tmpdir/tls-main1.o \
	 tmpdir/libtls-1a.so tmpdir/libtls-1b.so -R tmpdir" \
	"" \
	{ dummy.s } \
	"tls-1e" \
	"pass.out" \
    ] \
    [list \
	"TLS without PLT (2)" \
	"tmpdir/tls-main1.o tmpdir/tls-def1.o \
	 tmpdir/libtls-1b.so -R tmpdir" \
	"" \
	{ dummy.s } \
	"tls-1f" \
	"pass.out" \
    ] \
]