]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/testsuite/ld-scripts/script.exp
objcopy --extract-symbol
[thirdparty/binutils-gdb.git] / ld / testsuite / ld-scripts / script.exp
CommitLineData
252b5132
RH
1# Test basic linker script functionality
2# By Ian Lance Taylor, Cygnus Support
b90efa5b 3# Copyright (C) 1999-2015 Free Software Foundation, Inc.
a2b64bed 4#
f96b4a7b
NC
5# This file is part of the GNU Binutils.
6#
7# This program is free software; you can redistribute it and/or modify
a2b64bed 8# it under the terms of the GNU General Public License as published by
f96b4a7b 9# the Free Software Foundation; either version 3 of the License, or
a2b64bed 10# (at your option) any later version.
f96b4a7b 11#
a2b64bed
NC
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.
f96b4a7b 16#
a2b64bed
NC
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
f96b4a7b
NC
19# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20# MA 02110-1301, USA.
252b5132
RH
21
22set testname "script"
23
24if ![ld_assemble $as $srcdir/$subdir/script.s tmpdir/script.o] {
25 unresolved $testname
26 return
27}
28
29proc check_script { } {
30 global nm
31 global testname
32 global nm_output
33
992c450d 34 if ![ld_nm $nm "" tmpdir/script] {
252b5132 35 unresolved $testname
3ec57632
NC
36 return
37 }
38
39 if {![info exists nm_output(text_start)] \
40 || ![info exists nm_output(text_end)] \
41 || ![info exists nm_output(data_start)] \
42 || ![info exists nm_output(data_end)]} {
43 send_log "bad output from nm\n"
44 verbose "bad output from nm"
45 fail $testname
46 return
47 }
48
49 set passes 1
50 set text_end 0x104
51 set data_end 0x1004
52
53 if [istarget *c4x*-*-*] then {
54 set text_end 0x101
55 set data_end 0x1001
56 }
57
58 if [istarget *c54x*-*-*] then {
59 set text_end 0x102
60 set data_end 0x1002
61 }
62
63 if {$nm_output(text_start) != 0x100} {
64 send_log "text_start == $nm_output(text_start)\n"
65 verbose "text_start == $nm_output(text_start)"
66 set passes 0
67 }
68
cc9ad334
SKS
69 if {[info exists nm_output(tred)] \
70 && $nm_output(tred) != (0x100 + 0x8000)} {
71 send_log "tred == $nm_output(tred)\n"
72 verbose "tred == $nm_output(tred)"
73 set passes 0
74 }
75
3ec57632
NC
76 if {$nm_output(text_end) < $text_end \
77 || $nm_output(text_end) > 0x110} {
78 send_log "text_end == $nm_output(text_end)\n"
79 verbose "text_end == $nm_output(text_end)"
80 set passes 0
81 }
82
83 if {$nm_output(data_start) != 0x1000} {
84 send_log "data_start == $nm_output(data_start)\n"
85 verbose "data_start == $nm_output(data_start)"
86 set passes 0
87 }
88
cc9ad334
SKS
89 if {[info exists nm_output(fred)] \
90 && $nm_output(fred) != (0x1000 + 0x10000)} {
91 send_log "fred == $nm_output(fred)\n"
92 verbose "fred == $nm_output(fred)"
93 set passes 0
94 }
95
3ec57632
NC
96 if {$nm_output(data_end) < $data_end \
97 || $nm_output(data_end) > 0x1010} {
98 send_log "data_end == $nm_output(data_end)\n"
99 verbose "data_end == $nm_output(data_end)"
100 set passes 0
101 }
102
103 if { $passes } {
104 pass $testname
252b5132 105 } else {
3ec57632 106 fail $testname
252b5132
RH
107 }
108}
109
777690b6
ILT
110# PE targets need to set the image base to 0 to avoid complications from nm.
111set flags ""
112if {[istarget "*-*-pe*"] \
113 || [istarget "*-*-cygwin*"] \
99ad8390 114 || [istarget "*-*-mingw*"] \
777690b6 115 || [istarget "*-*-winnt*"] \
3ec57632 116 || [istarget "*-*-nt"] \
777690b6
ILT
117 || [istarget "*-*-interix*"] } then {
118 set flags "--image-base 0"
119}
120
121if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/script.t tmpdir/script.o"] {
252b5132
RH
122 fail $testname
123} else {
124 check_script
125}
126
127set testname "MRI script"
128
777690b6 129if ![ld_simple_link $ld tmpdir/script "$flags -c $srcdir/$subdir/scriptm.t"] {
252b5132
RH
130 fail $testname
131} else {
132 check_script
133}
3ec57632
NC
134
135set testname "MEMORY"
136
137if ![ld_simple_link $ld tmpdir/script "$flags -T $srcdir/$subdir/memory.t tmpdir/script.o"] {
138 fail $testname
139} else {
140 check_script
141}
4a93e180 142
cc9ad334
SKS
143set testname "MEMORY with symbols"
144if ![ld_simple_link $ld tmpdir/script "$flags -defsym DATA_ORIGIN=0x1000 -defsym DATA_LENGTH=0x10000 -T $srcdir/$subdir/memory_sym.t tmpdir/script.o"] {
145 fail $testname
146} else {
147 check_script
148}
149
4287f8de 150set test_script_list [lsort [glob $srcdir/$subdir/region-alias-*.t]]
4a93e180
NC
151
152foreach test_script $test_script_list {
9933d191 153 run_dump_test [string range $test_script 0 end-2]
4a93e180 154}
1eec346e 155
9933d191 156run_dump_test "align-with-input"