1# Copyright (C) 1999-2021 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with GCC; see the file COPYING3. If not see 15# <http://www.gnu.org/licenses/>. 16 17# Please email any bugs, comments, and/or additions to this file to: 18# gcc-bugs@gcc.gnu.org 19 20# This file defines a proc for determining the file format in use by the 21# target. This is useful for tests that are only supported by certain file 22# formats. This procedure is defined in a separate file so that it can be 23# included by other expect library files. 24 25proc gcc_target_object_format { } { 26 global gcc_target_object_format_saved 27 global tool 28 29 if [info exists gcc_target_object_format_saved] { 30 verbose "gcc_target_object_format returning saved $gcc_target_object_format_saved" 2 31 } elseif { [istarget *-*-darwin*] } { 32 # Darwin doesn't necessarily have objdump, so hand-code it. 33 set gcc_target_object_format_saved mach-o 34 } elseif { [istarget hppa*-*-hpux*] } { 35 # HP-UX doesn't necessarily have objdump, so hand-code it. 36 if { [istarget hppa*64*-*-hpux*] } { 37 set gcc_target_object_format_saved elf 38 } else { 39 set gcc_target_object_format_saved som 40 } 41 } elseif { [istarget *-*-aix*] } { 42 # AIX doesn't necessarily have objdump, so hand-code it. 43 set gcc_target_object_format_saved coff 44 } elseif { [istarget *-*-amdhsa*] } { 45 # AMD GCN uses LLVM objdump which is not CLI-compatible 46 set gcc_target_object_format_saved elf 47 } else { 48 set objdump_name [find_binutils_prog objdump] 49 set open_file [open objfmtst.c w] 50 puts $open_file "void foo(void) { }" 51 close $open_file 52 53 ${tool}_target_compile objfmtst.c objfmtst.o object "" 54 file delete objfmtst.c 55 56 set output [remote_exec host "$objdump_name" "--file-headers objfmtst.o"] 57 set output [lindex $output 1] 58 59 file delete objfmtst.o 60 61 if ![ regexp "file format (.*)arch" $output dummy objformat ] { 62 verbose "Could not parse objdump output" 2 63 set gcc_target_object_format_saved unknown 64 } else { 65 switch -regexp $objformat { 66 elf { 67 set gcc_target_object_format_saved elf 68 } 69 ecoff { 70 set gcc_target_object_format_saved ecoff 71 } 72 coff { 73 set gcc_target_object_format_saved coff 74 } 75 a\.out { 76 set gcc_target_object_format_saved a.out 77 } 78 pe { 79 set gcc_target_object_format_saved pe 80 } 81 som { 82 set gcc_target_object_format_saved som 83 } 84 default { 85 verbose "Unknown file format: $objformat" 3 86 set gcc_target_object_format_saved unknown 87 } 88 } 89 90 verbose "gcc_target_object_format returning $gcc_target_object_format_saved" 2 91 } 92 } 93 94 return $gcc_target_object_format_saved 95} 96