OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [binutils-2.18.50/] [ld/] [testsuite/] [ld-elfcomm/] [elfcomm.exp] - Blame information for rev 332

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
# Expect script for common symbol tests
2
#   Copyright 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
3
#
4
# This file is part of the GNU Binutils.
5
#
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 3 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19
# MA 02110-1301, USA.
20
#
21
# Written by H.J. Lu (hjl@gnu.org)
22
#
23
 
24
# Make sure that ld correctly handles common symbols in ELF.
25
 
26
# This test can only be run on ELF platforms.
27
if ![is_elf_format] {
28
    return
29
}
30
 
31
set test1       "size/aligment change of common symbols"
32
set test1w1     "$test1 (warning 1)"
33
set test1w2     "$test1 (warning 2)"
34
set test1c1     "$test1 (change 1)"
35
set test1c2     "$test1 (change 2)"
36
 
37
if { ![is_remote host] && [which $CC] == 0 } {
38
    untested $test1w1
39
    untested $test1w2
40
    untested $test1c1
41
    untested $test1c2
42
    return
43
}
44
if { [istarget score-*-*] } {
45
    untested $test1w1
46
    untested $test1w2
47
    untested $test1c1
48
    untested $test1c2
49
    return
50
}
51
 
52
proc dump_common1 { testname } {
53
    global exec_output
54
    global READELF
55
 
56
    send_log "$READELF --syms tmpdir/common1.o | grep foo\n"
57
    set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common1.o | grep foo"]
58
 
59
    if {   ![regexp "(\[        \]*)(\[0-9\]+):(\[      \]*)(\[0\]*)80(\[       \]+)4(\[        \]+)(COMMON|OBJECT)(\[  \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(PRC\\\[0xff03\\\]|COM|SCOM)(\[     \]+)_?foo2" $exec_output]
60
        || ![regexp "(\[        \]*)(\[0-9\]+):(\[      \]*)(\[0-9\]+)(\[       \]+)21(\[       \]+)OBJECT(\[   \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(\[0-9\]+)(\[       \]+)_?foo1" $exec_output] } {
61
        verbose $exec_output
62
        fail $testname
63
        return 0
64
    }
65
 
66
    return 1
67
}
68
 
69
proc stt_common_test { options testname } {
70
    global exec_output
71
    global READELF
72
    global ld
73
 
74
    set options "$options tmpdir/common1a.o"
75
 
76
    if { ! [ld_simple_link $ld tmpdir/common.exe $options] } {
77
      unresolved $testname
78
      return 0
79
    }
80
 
81
    send_log "$READELF --syms tmpdir/common.exe | grep foo\n"
82
    set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common.exe | grep foo"]
83
 
84
    if {![regexp "(\[   \]*)(\[0-9\]+):(\[      \]*)(\[0-9\]+)(\[       \]+)(\[0-9\]+)(\[       \]+)COMMON(\[   \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(\[0-9\]+)(\[       \]+)_?foo2" $exec_output] } {
85
        fail $testname
86
        return 0
87
    }
88
 
89
    pass $testname
90
    return 1
91
}
92
 
93
# Check to see if the assembler is generating symbols with the STT_COMMON type.
94
proc assembler_generates_commons {} {
95
    global exec_output
96
    global READELF
97
 
98
    verbose "Check to see if STT_COMMON symbols are being generated:"
99
    set exec_output [run_host_cmd "$READELF" "--syms tmpdir/common1a.o | grep foo"]
100
 
101
    if { ![regexp "(\[  \]*)(\[0-9\]+):(\[      \]*)(\[0\]*)80(\[       \]+).(\[        \]+)COMMON(\[   \]+)GLOBAL(\[   \]+)DEFAULT(\[  \]+)(PRC\\\[0xff03\\\]|COM|SCOM)(\[     \]+)_?foo2" $exec_output] } {
102
        verbose "STT_COMMON not generated"
103
        return 0
104
    }
105
 
106
    verbose "STT_COMMON's are generated"
107
    return 1
108
}
109
 
110
 
111
if {   ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1a.c tmpdir/common1a.o]
112
    || ![ld_compile "$CC $CFLAGS" $srcdir/$subdir/common1b.c tmpdir/common1b.o] } {
113
    unresolved $test1
114
    return
115
}
116
 
117
global ld
118
global link_output
119
 
120
if { [ld_simple_link $ld tmpdir/common1.o "-r tmpdir/common1a.o tmpdir/common1b.o"] } {
121
    unresolved $test1w1
122
    return
123
}
124
 
125
# This test fails on MIPS because the backend sets type_change_ok.
126
# The size change warning is suppressed.
127
if {[istarget mips*-*-*]} {
128
    if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } {
129
        fail $test1w1
130
    } else {
131
        pass $test1w1
132
    }
133
} else {
134
    if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output]
135
         || ![regexp "Warning: size of symbol \`_?foo1\' changed from 2 in tmpdir/common1a.o to 21 in tmpdir/common1b.o" $link_output] } {
136
        fail $test1w1
137
    } else {
138
        pass $test1w1
139
    }
140
}
141
 
142
if { [dump_common1 $test1c1] } {
143
    pass $test1c1
144
}
145
 
146
if { [ld_simple_link $ld tmpdir/common1.o "-r tmpdir/common1b.o tmpdir/common1a.o"] } {
147
    unresolved $test1w2
148
    return
149
}
150
 
151
if { ![regexp "Warning: alignment (\[0-9\]+) of symbol \`_?foo1\' in tmpdir/common1b.o is smaller than 64 in tmpdir/common1a.o" $link_output] } {
152
    fail $test1w2
153
} else {
154
    pass $test1w2
155
}
156
 
157
if { [dump_common1 $test1c2] } {
158
    pass $test1c2
159
}
160
 
161
#
162
# The following tests are for when we are generating STT_COMMON symbols only.
163
#
164
 
165
if { ![assembler_generates_commons] } {
166
    return
167
}
168
 
169
stt_common_test "-static -e 0" "static link of common symbols"
170
stt_common_test "-shared"      "shared link of common symbols"
171
stt_common_test "-pie"         "position independent link of common symbols"
172
 

powered by: WebSVN 2.1.0

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