# Copyright (C) 2021-2022 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. # load_file $srcdir/../../ld/testsuite/lib/ld-lib.exp global srcdir subdir OBJDUMP global testname global subsrcdir set subsrcdir "$srcdir/$subdir/" set testname "$dir/libctf-repeat-cu.exp" if ![is_elf_format] { unsupported "CTF needs bfd changes to be emitted on non-ELF" return 0 } if {![check_ctf_available]} { unsupported "no CTF format support in the compiler" return 0 } if {[info exists env(LC_ALL)]} { set old_lc_all $env(LC_ALL) } set env(LC_ALL) "C" # Compile one SRC to OBJ and put it into ARCHIVE. proc one_lib_compile { src flags obj archive } { global CC_FOR_TARGET CFLAGS_FOR_TARGET AR subsrcdir if [is_remote host] { set src [remote_download host [file join $subsrcdir $src]] } else { set src [file join $subsrcdir $src] } set comp_output [prune_warnings [run_host_cmd "$CC_FOR_TARGET" "$CFLAGS_FOR_TARGET $flags -gctf -fPIC -c -o $obj $src"]] if { $comp_output != "" } { return $comp_output } set ar_output [prune_warnings [run_host_cmd "$AR" "rc $archive $obj"]] return $comp_output } # Compile one SRC to OBJ and put it into ARCHIVE: error-check the result. proc one_lib_compile_check { src flags obj archive } { global testname set comp_output [one_lib_compile $src $flags $obj $archive] if { $comp_output != ""} { send_log "compilation of $src with $flags failed with <$comp_output>" perror "compilation of $src with $flags failed" fail $testname return 0 } return 1 } if { ! [one_lib_compile_check libctf-repeat-cu-lib.c "-DINT -DFUN=a" tmpdir/libctf-repeat-cu-lib.o tmpdir/a.a] } { return 0 } if { ! [one_lib_compile_check libctf-repeat-cu-lib.c "-DCHAR -DFUN=b" tmpdir/libctf-repeat-cu-lib.o tmpdir/b.a] } { return 0 } if { ! [one_lib_compile_check libctf-repeat-cu-lib.c "-DFUN=c" tmpdir/libctf-repeat-cu-lib.o tmpdir/c.a] } { return 0 } if [is_remote host] { set src [remote_download host [file join $subsrcdir libctf-repeat-cu-main.c]] } else { set src [file join $subsrcdir libctf-repeat-cu-main.c] } set comp_output [prune_warnings [run_host_cmd "$CC_FOR_TARGET" "$CFLAGS_FOR_TARGET -gctf -fPIC -shared -o tmpdir/libctf-repeat-cu-main.so $src tmpdir/a.a tmpdir/b.a tmpdir/c.a"]] if { $comp_output != "" } { send_log "compilation of tmpdir/libctf-repeat-cu-main.so failed" perror "compilation of tmpdir/libctf-repeat-cu-main.so failed" fail $testname return $comp_output } set comp_output [prune_warnings [run_host_cmd "$OBJDUMP" "--ctf tmpdir/libctf-repeat-cu-main.so > tmpdir/dump.out"]] if { [regexp_diff "tmpdir/dump.out" [file join $subsrcdir libctf-repeat-cu.d] ] } { fail $testname if { $verbose == 2 } then { verbose "output is [file_contents tmpdir/dump.out]" 2 } } pass $testname if {[info exists old_lc_all]} { set env(LC_ALL) $old_lc_all } else { unset env(LC_ALL) }