⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 undefined.exp

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 EXP
字号:
# Test that the linker reports undefined symbol errors correctly.# By Ian Lance Taylor, Cygnus Support##   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001#   Free Software Foundation, Inc.## This file 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.set testund "undefined"set testfn "undefined function"set testline "undefined line"if { [which $CC] == 0 } {    verbose "Could not find C compiler!" 1    untested $testund    untested $testfn    untested $testline    return}if ![ld_compile "$CC -g" $srcdir/$subdir/undefined.c tmpdir/undefined.o] {    verbose "Unable to compile test file!" 1    unresolved $testund    unresolved $testfn    unresolved $testline    return}catch "exec rm -f tmpdir/undefined" exec_outputset flags [big_or_little_endian]# Using -e start prevents the SunOS linker from trying to build a# shared library.send_log "$ld -e start $flags -o tmpdir/undefined tmpdir/undefined.o\n"verbose "$ld -e start $flags -o tmpdir/undefined tmpdir/undefined.o"catch "exec $ld -e start $flags -o tmpdir/undefined tmpdir/undefined.o" exec_outputsend_log "$exec_output\n"verbose "$exec_output"proc checkund { string testname } {    global exec_output    if [string match "*$string*" $exec_output] {	pass $testname    } else {	fail $testname    }}set mu "undefined reference to `*this_function_is_not_defined'"checkund $mu $testund# ARM PE defaults to using stabs debugging, which we can't handle for# a COFF file.#setup_xfail "arm*-*-pe*"#setup_xfail "thumb*-*-pe*"# Just doesn't work for PA ELF.  No clue why.setup_xfail "hppa*-*-*elf*"# With dwarf-2, we can't get the function in which the reference# occurs; see below.setup_xfail "alpha*-*-linux*"setup_xfail "hppa*64*-*-*"setup_xfail "mn10300-*-elf"setup_xfail "sh-*-*"set mf "tmpdir/undefined.o: In function `function':"checkund $mf $testfn# COFF SH gets this test wrong--it reports line 10, because although# the jump is at line 9, the function address, and the reloc, is# stored at the end of the function.setup_xfail "sh-*-*"# ARM PE defaults to using stabs debugging, which we can't handle for# a COFF file.#setup_xfail "arm*-*-pe*"#setup_xfail "thumb*-*-pe*"# Just doesn't work for PA ELF.  No clue why.setup_xfail "hppa*-*-*elf*"set ml "undefined.c:9: undefined reference to `*this_function_is_not_defined'"# With targets that use elf/dwarf2, such as the arm-elf and thumb-elf# toolchains, the code in bfd/elf.c:_bfd_elf_find_nearest_line() is called# in order to locate the file name/line number where the undefined# reference occurs.  Unfortunately this tries to use the dwarf2 debug# information held in the .debug_info section.  This section contains a series# of comp_unit structures, each of which has a low/high address range# representing the span of memory locations covered by that structure.  The# structures also index into other structures held in the .debug_line section# and together they can translate memory locations back into file/function/line# number addresses in the source code.  Since the information about the memory# region covered by a comp_unit is only determined at link time, the low/high# addresses in the .debug_info section and the line addresses in the .debug_line# section are computed by generating relocs against known symbols in the object# code.## When the undefined reference is detected, the relocs in the dwarf2# debug sections have not yet been resolved, so the low/high addresses and the# line number address are all set at zero.  Thus when _bfd_elf_find_nearest_line()# calls _bfd_dwarf2_find_nearest_line() no comp_unit can be found which# actually covers the address where the reference occured, and so# _bfd_elf_find_nearest_line() fails.## The upshot of all of this, is that the error message reported by the# linker, instead of having a source file name & line number as in:##   undefined.c:9: undefined reference to `this_function_is_not_defined'## has an object file & section address instead:##   undefined.0(.text+0xc): undefined reference to `this_function_is_not_defined'## hence the xfails below.#setup_xfail arm-*-elfsetup_xfail i?86-*-freebsd*#setup_xfail strongarm-*-elf#setup_xfail thumb-*-elfsetup_xfail mcore-*-elfsetup_xfail mips-sgi-irix6*setup_xfail "sh64-*-*"# The undefined test fails on 31 bit s/390 because the address of the # function `this_function_is_not_defined' is stored in the literal pool of# the function. Therefore the line number in the error message is 8 instead# of 9. On 64 bit s/390 this works because of the new brasl instruction that# doesn't need a literal pool entry.# With gcc 3.1 s/390 uses dwarf-2 and the test will fail on 64 bit as well.setup_xfail s390-*-*setup_xfail s390x-*-*checkund $ml $testline

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -