OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [binutils-2.20.1/] [ld/] [testsuite/] [ld-elfcomm/] [elfcomm.exp] - Blame information for rev 818

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 205 julius
# Expect script for common symbol tests
2
#   Copyright 2003, 2005, 2006, 2007, 2008, 2009
3
#   Free Software Foundation, Inc.
4
#
5
# This file is part of the GNU Binutils.
6
#
7
# This program is free software; you can redistribute it and/or modify
8
# it under the terms of the GNU General Public License as published by
9
# the Free Software Foundation; either version 3 of the License, or
10
# (at your option) any later version.
11
#
12
# This program is distributed in the hope that it will be useful,
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with this program; if not, write to the Free Software
19
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20
# MA 02110-1301, USA.
21
#
22
# Written by H.J. Lu (hjl@gnu.org)
23
#
24
 
25
# Make sure that ld correctly handles common symbols in ELF.
26
 
27
# This test can only be run on ELF platforms.
28
if ![is_elf_format] {
29
    return
30
}
31
 
32
proc test_sort_common {} {
33
    global exec_output
34
    global objdump
35
    global srcdir
36
    global subdir
37
    global as
38
    global ld
39
 
40
    set test "--sort-common (descending)"
41
 
42
    verbose "Check to see that --sort-common sorts in descending alignment"
43
 
44
    # We do not run the sort common tests for the DLX target because we know that the linker
45
    # will seg-fault.  The built-in DLX linker script requires that there be something in the
46
    # .text section and our sort-common.s file does not provide anything.
47
    if [istarget dlx-*-*] {
48
        untested "$test"
49
        return 0
50
    }
51
 
52
    if { ![ld_assemble $as $srcdir/$subdir/sort-common.s tmpdir/sort-common.o] } {
53
        unresolved "$test"
54
        return 0
55
    }
56
 
57
    if { ![ld_simple_link $ld tmpdir/sort-common.dx "--sort-common=descending tmpdir/sort-common.o"] } {
58
        fail "$test"
59
        return 0
60
    }
61
 
62
    send_log "$objdump --syms tmpdir/sort-common.dx | grep var | sort\n"
63
    set exec_output [run_host_cmd "$objdump" "--syms tmpdir/sort-common.dx | grep var | sort"]
64
 
65
    # Don't know why, but the CR ports fail this test.
66
    setup_xfail "cr16-*-*" "crx-*-*"
67
 
68
    # Note: The second regexp is for targets which put small commons in a .sbss
69
    #  section and large commons in a .bss section.
70
    if {   ![regexp ".*var_16.*var_8.*var_4.*var_2.*var_1.*" $exec_output]
71
        && ![regexp ".*sbss.*var_8.*var_4.*var_2.*var_1.*bss.*var_16.*" $exec_output] } {
72
        fail $test
73
    } else {
74
        pass $test
75
    }
76
 
77
    set test "--sort-common (ascending)"
78
 
79
    verbose "Check to see that --sort-common=ascending sorts in ascending alignment"
80
 
81
    if { ![ld_simple_link $ld tmpdir/sort-common.ax "--sort-common=ascending tmpdir/sort-common.o"] } {
82
        fail "$test"
83
        return 0
84
    }
85
 
86
    send_log "$objdump --syms tmpdir/sort-common.ax | grep var | sort\n"
87
    set exec_output [run_host_cmd "$objdump" "--syms tmpdir/sort-common.ax | grep var | sort"]
88
 
89
    if {![regexp ".*var_1.*var_2.*var_4.*var_8.*var_16.*" $exec_output]} {
90
        fail $test
91
        return 0
92
    }
93
 
94
    pass $test
95
    return 1
96
}
97
 
98
test_sort_common
99
 
100
set test1       "size/aligment change of common symbols"
101
set test1w1     "$test1 (warning 1)"
102
set test1w2     "$test1 (warning 2)"
103
set test1c1     "$test1 (change 1)"
104
set test1c2     "$test1 (change 2)"
105
 
106
if { ![is_remote host] && [which $CC] == 0 } {
107
    untested $test1w1
108
    untested $test1w2
109
    untested $test1c1
110
    untested $test1c2
111
    return
112
}
113
if { [istarget score-*-*] } {
114
    untested $test1w1
115
    untested $test1w2
116
    untested $test1c1
117
    untested $test1c2
118
    return
119
}
120
 
121
proc dump_common1 { testname } {
122
    global exec_output
123
    global READELF
124
 
125
    send_log "$READELF --syms tmpdir/common1.o | grep foo\n"
126
    set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common1.o | grep foo"]
127
 
128
    if {   ![regexp "(\[        \]*)(\[0-9\]+):(\[      \]*)(\[0\]*)80(\[       \]+)4(\[        \]+)(COMMON|OBJECT)(\[  \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(PRC\\\[0xff03\\\]|COM|SCOM)(\[     \]+)_?foo2" $exec_output]
129
        || ![regexp "(\[        \]*)(\[0-9\]+):(\[      \]*)(\[0-9\]+)(\[       \]+)21(\[       \]+)OBJECT(\[   \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(\[0-9\]+)(\[       \]+)_?foo1" $exec_output] } {
130
        verbose $exec_output
131
        fail $testname
132
        return 0
133
    }
134
 
135
    return 1
136
}
137
 
138
proc stt_common_test { options testname } {
139
    global exec_output
140
    global READELF
141
    global ld
142
 
143
    set options "$options tmpdir/common1a.o"
144
 
145
    if { ! [ld_simple_link $ld tmpdir/common.exe $options] } {
146
      unresolved $testname
147
      return 0
148
    }
149
 
150
    send_log "$READELF --syms tmpdir/common.exe | grep foo\n"
151
    set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common.exe | grep foo"]
152
 
153
    if {![regexp "(\[   \]*)(\[0-9\]+):(\[      \]*)(\[0-9\]+)(\[       \]+)(\[0-9\]+)(\[       \]+)COMMON(\[   \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(\[0-9\]+)(\[       \]+)_?foo2" $exec_output] } {
154
        fail $testname
155
        return 0
156
    }
157
 
158
    pass $testname
159
    return 1
160
}
161
 
162
# Check to see if the assembler is generating symbols with the STT_COMMON type.
163
proc assembler_generates_commons {} {
164
    global exec_output
165
    global READELF
166
 
167
    verbose "Check to see if STT_COMMON symbols are being generated:"
168
    set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common1a.o | grep foo"]
169
 
170
    if { ![regexp "(\[  \]*)(\[0-9\]+):(\[      \]*)(\[0\]*)80(\[       \]+).(\[        \]+)COMMON(\[   \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(PRC\\\[0xff03\\\]|COM|SCOM)(\[     \]+)_?foo2" $exec_output] } {
171
        verbose "STT_COMMON not generated"
172
        return 0
173
    }
174
 
175
    verbose "STT_COMMON's are generated"
176
    return 1
177
}
178
 
179
 
180
if {   ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1a.c tmpdir/common1a.o]
181
    || ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1b.c tmpdir/common1b.o] } {
182
    unresolved $test1
183
    return
184
}
185
 
186
global ld
187
global link_output
188
 
189
set options "-r tmpdir/common1a.o tmpdir/common1b.o"
190
 
191
# SH64 targets needs an extra ld option for this test.
192
if [istarget sh64*-*-*] {
193
    if [istarget sh64*l*-*-*] {
194
        set options "-mshlelf32 $options"
195
    } else {
196
        set options "-mshelf32 $options"
197
    }
198
}
199
 
200
if { [ld_simple_link $ld tmpdir/common1.o $options] } {
201
    unresolved $test1w1
202
    return
203
}
204
 
205
# This test fails on MIPS because the backend sets type_change_ok.
206
# The size change warning is suppressed.
207
if {[istarget mips*-*-*]} {
208
    if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } {
209
        fail $test1w1
210
    } else {
211
        pass $test1w1
212
    }
213
} else {
214
    if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output]
215
         || ![regexp "Warning: size of symbol \`_?foo1\' changed from 2 in tmpdir/common1a.o to 21 in tmpdir/common1b.o" $link_output] } {
216
        fail $test1w1
217
    } else {
218
        pass $test1w1
219
    }
220
}
221
 
222
if { [dump_common1 $test1c1] } {
223
    pass $test1c1
224
}
225
 
226
set options "-r tmpdir/common1b.o tmpdir/common1a.o"
227
 
228
# SH64 targets needs an extra ld option for this test.
229
if [istarget sh64*-*-*] {
230
    if [istarget sh64*l*-*-*] {
231
        set options "-mshlelf32 $options"
232
    } else {
233
        set options "-mshelf32 $options"
234
    }
235
}
236
 
237
if { [ld_simple_link $ld tmpdir/common1.o $options] } {
238
    unresolved $test1w2
239
    return
240
}
241
 
242
if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } {
243
    fail $test1w2
244
} else {
245
    pass $test1w2
246
}
247
 
248
if { [dump_common1 $test1c2] } {
249
    pass $test1c2
250
}
251
 
252
#
253
# The following tests are for when we are generating STT_COMMON symbols only.
254
#
255
 
256
if { ![assembler_generates_commons] } {
257
    return
258
}
259
 
260
stt_common_test "-static -e 0" "static link of common symbols"
261
stt_common_test "-shared"      "shared link of common symbols"
262
stt_common_test "-pie"         "position independent link of common symbols"
263
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.