mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +08:00
Testsuite: Add gdb_can_simple_compile
Simplfy gdb.exp by adding a function that will attempt to compile a piece of code, then clean up. gdb/testsuite * lib/gdb.exp (gdb_can_simple_compile): Add proc. (support_complex_tests): Use gdb_can_simple_compile. (is_ilp32_target): Likewise. (is_lp64_target): Likewise. (is_64_target): Likewise. (is_amd64_regs_target): Likewise. (is_aarch32_target): Likewise. (gdb_int128_helper): Likewise.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2018-09-12 Alan Hayward <alan.hayward@arm.com>
|
||||||
|
|
||||||
|
* lib/gdb.exp (gdb_can_simple_compile): Add proc.
|
||||||
|
(support_complex_tests): Use gdb_can_simple_compile.
|
||||||
|
(is_ilp32_target): Likewise.
|
||||||
|
(is_lp64_target): Likewise.
|
||||||
|
(is_64_target): Likewise.
|
||||||
|
(is_amd64_regs_target): Likewise.
|
||||||
|
(is_aarch32_target): Likewise.
|
||||||
|
(gdb_int128_helper): Likewise.
|
||||||
|
|
||||||
2018-09-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2018-09-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* Makefile.in (check-parallel-racy): Fix dg-extract-results.sh path.
|
* Makefile.in (check-parallel-racy): Fix dg-extract-results.sh path.
|
||||||
|
@ -2272,35 +2272,16 @@ gdb_caching_proc support_complex_tests {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set up, compile, and execute a test program containing _Complex types.
|
# Compile a test program containing _Complex types.
|
||||||
# Include the current process ID in the file names to prevent conflicts
|
|
||||||
# with invocations for multiple testsuites.
|
|
||||||
set src [standard_temp_file complex[pid].c]
|
|
||||||
set exe [standard_temp_file complex[pid].x]
|
|
||||||
|
|
||||||
gdb_produce_source $src {
|
return [gdb_can_simple_compile complex {
|
||||||
int main() {
|
int main() {
|
||||||
_Complex float cf;
|
_Complex float cf;
|
||||||
_Complex double cd;
|
_Complex double cd;
|
||||||
_Complex long double cld;
|
_Complex long double cld;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
} executable]
|
||||||
|
|
||||||
verbose "compiling testfile $src" 2
|
|
||||||
set compile_flags {debug nowarnings quiet}
|
|
||||||
set lines [gdb_compile $src $exe executable $compile_flags]
|
|
||||||
file delete $src
|
|
||||||
file delete $exe
|
|
||||||
|
|
||||||
if ![string match "" $lines] then {
|
|
||||||
verbose "testfile compilation failed, returning 0" 2
|
|
||||||
set result 0
|
|
||||||
} else {
|
|
||||||
set result 1
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return 1 if GDB can get a type for siginfo from the target, otherwise
|
# Return 1 if GDB can get a type for siginfo from the target, otherwise
|
||||||
@ -2462,86 +2443,32 @@ proc gdb_produce_source { name sources } {
|
|||||||
# This cannot be decided simply from looking at the target string,
|
# This cannot be decided simply from looking at the target string,
|
||||||
# as it might depend on externally passed compiler options like -m64.
|
# as it might depend on externally passed compiler options like -m64.
|
||||||
gdb_caching_proc is_ilp32_target {
|
gdb_caching_proc is_ilp32_target {
|
||||||
set me "is_ilp32_target"
|
return [gdb_can_simple_compile is_ilp32_target {
|
||||||
|
|
||||||
set src [standard_temp_file ilp32[pid].c]
|
|
||||||
set obj [standard_temp_file ilp32[pid].o]
|
|
||||||
|
|
||||||
gdb_produce_source $src {
|
|
||||||
int dummy[sizeof (int) == 4
|
int dummy[sizeof (int) == 4
|
||||||
&& sizeof (void *) == 4
|
&& sizeof (void *) == 4
|
||||||
&& sizeof (long) == 4 ? 1 : -1];
|
&& sizeof (long) == 4 ? 1 : -1];
|
||||||
}
|
}]
|
||||||
|
|
||||||
verbose "$me: compiling testfile $src" 2
|
|
||||||
set lines [gdb_compile $src $obj object {quiet}]
|
|
||||||
file delete $src
|
|
||||||
file delete $obj
|
|
||||||
|
|
||||||
if ![string match "" $lines] then {
|
|
||||||
verbose "$me: testfile compilation failed, returning 0" 2
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose "$me: returning 1" 2
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return 1 if target is LP64.
|
# Return 1 if target is LP64.
|
||||||
# This cannot be decided simply from looking at the target string,
|
# This cannot be decided simply from looking at the target string,
|
||||||
# as it might depend on externally passed compiler options like -m64.
|
# as it might depend on externally passed compiler options like -m64.
|
||||||
gdb_caching_proc is_lp64_target {
|
gdb_caching_proc is_lp64_target {
|
||||||
set me "is_lp64_target"
|
return [gdb_can_simple_compile is_lp64_target {
|
||||||
|
|
||||||
set src [standard_temp_file lp64[pid].c]
|
|
||||||
set obj [standard_temp_file lp64[pid].o]
|
|
||||||
|
|
||||||
gdb_produce_source $src {
|
|
||||||
int dummy[sizeof (int) == 4
|
int dummy[sizeof (int) == 4
|
||||||
&& sizeof (void *) == 8
|
&& sizeof (void *) == 8
|
||||||
&& sizeof (long) == 8 ? 1 : -1];
|
&& sizeof (long) == 8 ? 1 : -1];
|
||||||
}
|
}]
|
||||||
|
|
||||||
verbose "$me: compiling testfile $src" 2
|
|
||||||
set lines [gdb_compile $src $obj object {quiet}]
|
|
||||||
file delete $src
|
|
||||||
file delete $obj
|
|
||||||
|
|
||||||
if ![string match "" $lines] then {
|
|
||||||
verbose "$me: testfile compilation failed, returning 0" 2
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose "$me: returning 1" 2
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return 1 if target has 64 bit addresses.
|
# Return 1 if target has 64 bit addresses.
|
||||||
# This cannot be decided simply from looking at the target string,
|
# This cannot be decided simply from looking at the target string,
|
||||||
# as it might depend on externally passed compiler options like -m64.
|
# as it might depend on externally passed compiler options like -m64.
|
||||||
gdb_caching_proc is_64_target {
|
gdb_caching_proc is_64_target {
|
||||||
set me "is_64_target"
|
return [gdb_can_simple_compile is_64_target {
|
||||||
|
|
||||||
set src [standard_temp_file is64[pid].c]
|
|
||||||
set obj [standard_temp_file is64[pid].o]
|
|
||||||
|
|
||||||
gdb_produce_source $src {
|
|
||||||
int function(void) { return 3; }
|
int function(void) { return 3; }
|
||||||
int dummy[sizeof (&function) == 8 ? 1 : -1];
|
int dummy[sizeof (&function) == 8 ? 1 : -1];
|
||||||
}
|
}]
|
||||||
|
|
||||||
verbose "$me: compiling testfile $src" 2
|
|
||||||
set lines [gdb_compile $src $obj object {quiet}]
|
|
||||||
file delete $src
|
|
||||||
file delete $obj
|
|
||||||
|
|
||||||
if ![string match "" $lines] then {
|
|
||||||
verbose "$me: testfile compilation failed, returning 0" 2
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose "$me: returning 1" 2
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return 1 if target has x86_64 registers - either amd64 or x32.
|
# Return 1 if target has x86_64 registers - either amd64 or x32.
|
||||||
@ -2552,30 +2479,13 @@ gdb_caching_proc is_amd64_regs_target {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
set me "is_amd64_regs_target"
|
|
||||||
|
|
||||||
set src [standard_temp_file reg64[pid].s]
|
|
||||||
set obj [standard_temp_file reg64[pid].o]
|
|
||||||
|
|
||||||
set list {}
|
set list {}
|
||||||
foreach reg \
|
foreach reg \
|
||||||
{rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15} {
|
{rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15} {
|
||||||
lappend list "\tincq %$reg"
|
lappend list "\tincq %$reg"
|
||||||
}
|
}
|
||||||
gdb_produce_source $src [join $list \n]
|
|
||||||
|
|
||||||
verbose "$me: compiling testfile $src" 2
|
return [gdb_can_simple_compile is_amd64_regs_target [join $list \n]]
|
||||||
set lines [gdb_compile $src $obj object {quiet}]
|
|
||||||
file delete $src
|
|
||||||
file delete $obj
|
|
||||||
|
|
||||||
if ![string match "" $lines] then {
|
|
||||||
verbose "$me: testfile compilation failed, returning 0" 2
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose "$me: returning 1" 2
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return 1 if this target is an x86 or x86-64 with -m32.
|
# Return 1 if this target is an x86 or x86-64 with -m32.
|
||||||
@ -2597,30 +2507,13 @@ gdb_caching_proc is_aarch32_target {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
set me "is_aarch32_target"
|
|
||||||
|
|
||||||
set src [standard_temp_file aarch32[pid].s]
|
|
||||||
set obj [standard_temp_file aarch32[pid].o]
|
|
||||||
|
|
||||||
set list {}
|
set list {}
|
||||||
foreach reg \
|
foreach reg \
|
||||||
{r0 r1 r2 r3} {
|
{r0 r1 r2 r3} {
|
||||||
lappend list "\tmov $reg, $reg"
|
lappend list "\tmov $reg, $reg"
|
||||||
}
|
}
|
||||||
gdb_produce_source $src [join $list \n]
|
|
||||||
|
|
||||||
verbose "$me: compiling testfile $src" 2
|
return [gdb_can_simple_compile aarch32 [join $list \n]]
|
||||||
set lines [gdb_compile $src $obj object {quiet}]
|
|
||||||
file delete $src
|
|
||||||
file delete $obj
|
|
||||||
|
|
||||||
if ![string match "" $lines] then {
|
|
||||||
verbose "$me: testfile compilation failed, returning 0" 2
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose "$me: returning 1" 2
|
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return 1 if this target is an aarch64, either lp64 or ilp32.
|
# Return 1 if this target is an aarch64, either lp64 or ilp32.
|
||||||
@ -3006,22 +2899,10 @@ gdb_caching_proc skip_btrace_pt_tests {
|
|||||||
|
|
||||||
# A helper that compiles a test case to see if __int128 is supported.
|
# A helper that compiles a test case to see if __int128 is supported.
|
||||||
proc gdb_int128_helper {lang} {
|
proc gdb_int128_helper {lang} {
|
||||||
set src [standard_temp_file i128[pid].c]
|
return [gdb_can_simple_compile "i128-for-$lang" {
|
||||||
set obj [standard_temp_file i128[pid].o]
|
|
||||||
|
|
||||||
verbose -log "checking $lang for __int128"
|
|
||||||
gdb_produce_source $src {
|
|
||||||
__int128 x;
|
__int128 x;
|
||||||
int main() { return 0; }
|
int main() { return 0; }
|
||||||
}
|
} executable $lang]
|
||||||
|
|
||||||
set lines [gdb_compile $src $obj object [list nowarnings quiet $lang]]
|
|
||||||
file delete $src
|
|
||||||
file delete $obj
|
|
||||||
|
|
||||||
set result [expr {!![string match "" $lines]}]
|
|
||||||
verbose -log "__int128 for $lang result = $result"
|
|
||||||
return $result
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Return true if the C compiler understands the __int128 type.
|
# Return true if the C compiler understands the __int128 type.
|
||||||
@ -3524,6 +3405,46 @@ gdb_caching_proc universal_compile_options {
|
|||||||
return $options
|
return $options
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Compile the code in $code to a file based on $name, using the flags
|
||||||
|
# $compile_flag as well as debug, nowarning and quiet.
|
||||||
|
# Return 1 if code can be compiled
|
||||||
|
# Delete all created files and objects.
|
||||||
|
|
||||||
|
proc gdb_can_simple_compile {name code {type object} {compile_flags {}}} {
|
||||||
|
|
||||||
|
switch -regexp -- $type {
|
||||||
|
"executable" {
|
||||||
|
set postfix "x"
|
||||||
|
}
|
||||||
|
"object" {
|
||||||
|
set postfix "o"
|
||||||
|
}
|
||||||
|
"preprocess" {
|
||||||
|
set postfix "i"
|
||||||
|
}
|
||||||
|
"assembly" {
|
||||||
|
set postfix "s"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set src [standard_temp_file $name-[pid].c]
|
||||||
|
set obj [standard_temp_file $name-[pid].$postfix]
|
||||||
|
set compile_flags [concat $compile_flags {debug nowarnings quiet}]
|
||||||
|
|
||||||
|
gdb_produce_source $src $code
|
||||||
|
|
||||||
|
verbose "$name: compiling testfile $src" 2
|
||||||
|
set lines [gdb_compile $src $obj $type $compile_flags]
|
||||||
|
|
||||||
|
file delete $src
|
||||||
|
file delete $obj
|
||||||
|
|
||||||
|
if ![string match "" $lines] then {
|
||||||
|
verbose "$name: compilation failed, returning 0" 2
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# Some targets need to always link a special object in. Save its path here.
|
# Some targets need to always link a special object in. Save its path here.
|
||||||
global gdb_saved_set_unbuffered_mode_obj
|
global gdb_saved_set_unbuffered_mode_obj
|
||||||
set gdb_saved_set_unbuffered_mode_obj ""
|
set gdb_saved_set_unbuffered_mode_obj ""
|
||||||
|
Reference in New Issue
Block a user