gdb/testsuite: add "macros" option to gdb_compile
authorSimon Marchi <simon.marchi@efficios.com>
Thu, 7 Apr 2022 01:51:57 +0000 (21:51 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Thu, 7 Apr 2022 18:41:28 +0000 (14:41 -0400)
Make gdb_compile handle a new "macros" option, which makes it pass the
appropriate flag to make the compiler include macro information in the
debug info.  This will help simplify tests using macros, reduce
redundant code, and make it easier to add support for a new compiler.

Right now it only handles clang specially (using -fdebug-macro) and
falls back to -g3 otherwise (which works for gcc).  Other compilers can
be added as needed.

There are some tests that are currently skipped if the compiler is nor
gcc nor clang.  After this patch, the tests will attempt to run (the -g3
fall back will be used).  That gives a chance to people using other
compilers to notice something is wrong and maybe add support for their
compiler.  If it is needed to support a compiler that doesn't have a way
to include macro information, then we can always introduce a
"skip_macro_tests" that can be used to skip over them.

Change-Id: I50cd6ab1bfbb478c1005486408e214b551364c9b

gdb/testsuite/gdb.base/info-macros.exp
gdb/testsuite/gdb.base/macscp.exp
gdb/testsuite/gdb.base/style.exp
gdb/testsuite/gdb.linespec/macro-relative.exp
gdb/testsuite/lib/gdb.exp

index b3e1032d76f9eea1b3b226baea429886f3ed5abe..39c9bc696ccf5e9c3de0a0a6c6b8c0313e947683 100644 (file)
@@ -21,19 +21,7 @@ if [using_fission] {
     return -1
 }
 
-set options {debug}
-
-get_compiler_info
-if { [test_compiler_info gcc*] } {
-    lappend options "additional_flags=-g3"
-} elseif { [test_compiler_info clang*] } {
-    lappend options "additional_flags=-fdebug-macro"
-} else {
-    untested "no compiler info"
-    return -1
-}
-
-if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} $options] } {
+if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug macros}] } {
     return -1
 }
 
index 4c06423e6d506f4d97902347ca7635955f28630c..be9bd5312ff236df3e4d1253da9cd2a01d6fe2b1 100644 (file)
 standard_testfile macscp1.c
 set objfile [standard_output_file ${testfile}.o]
 
-set options { debug additional_flags=-DFROM_COMMANDLINE=ARG}
-
-get_compiler_info
-if { [test_compiler_info "gcc-*"] } {
-    lappend options additional_flags=-g3
-} elseif { [test_compiler_info "clang-*"] } {
-    lappend options additional_flags=-fdebug-macro
-}
+set options {debug macros additional_flags=-DFROM_COMMANDLINE=ARG}
 
 # Generate the intermediate object file.  This is required by Darwin to
 # have access to the .debug_macinfo section.
 if  {[gdb_compile "${srcdir}/${subdir}/macscp1.c" "${objfile}" \
-         object $options] != "" 
+         object $options] != ""
      || [gdb_compile "${objfile}" "${binfile}" executable $options] != "" } {
     untested "failed to compile"
     return -1
index 611b8ae52ba07ab873646f4f9a3d2ddb0b7af1d5..6bb5e1c9ac06b48ca31c8aa89775394070952649 100644 (file)
@@ -20,18 +20,7 @@ load_lib gdb-python.exp
 standard_testfile
 
 # Compile the test executable.
-set test_macros 0
-set options debug
-get_compiler_info
-if { [test_compiler_info "gcc-*"] } {
-    lappend options additional_flags=-g3
-    set test_macros 1
-} elseif { [test_compiler_info "clang-*"] } {
-    lappend options additional_flags=-fdebug-macro
-    set test_macros 1
-}
-
-if {[build_executable "failed to build" $testfile $srcfile $options]} {
+if {[build_executable "failed to build" $testfile $srcfile {debug macros}]} {
     return -1
 }
 
@@ -75,7 +64,7 @@ proc clean_restart_and_disable { args } {
 # CLEAN_RESTART_AND_DISABLE instead of CLEAN_RESTART, this ensures
 # that the test operates as expected as styles are disabled.
 proc run_style_tests { } {
-    global testfile srcfile hex binfile test_macros
+    global testfile srcfile hex binfile
     global currently_disabled_style decimal hex
 
     save_vars { env(TERM) } {
@@ -181,11 +170,9 @@ proc run_style_tests { } {
            gdb_test_no_output "set width 0" ""
        }
 
-       if {$test_macros} {
-           set macro_line [gdb_get_line_number "\#define SOME_MACRO"]
-           gdb_test "info macro SOME_MACRO" \
-               "Defined at $base_file_expr:$macro_line\r\n#define SOME_MACRO 23"
-       }
+       set macro_line [gdb_get_line_number "\#define SOME_MACRO"]
+       gdb_test "info macro SOME_MACRO" \
+           "Defined at $base_file_expr:$macro_line\r\n#define SOME_MACRO 23"
 
        gdb_test_no_output "set width 0"
 
index f827420eb3cf6de15cb7d23ea01f2769fa8c81d4..609f290d8fbe4cfbf4cc15a14f8e992b0170f635 100644 (file)
@@ -26,14 +26,7 @@ if [is_remote host] {
     return 0
 }
 
-set opts {debug additional_flags=-I.}
-
-get_compiler_info
-if [test_compiler_info gcc*] {
-    lappend opts additional_flags=-g3
-} elseif [test_compiler_info clang*] {
-    lappend opts additional_flags=-fdebug-macro
-}
+set opts {debug additional_flags=-I. macros}
 
 if { [file pathtype $objdir] == "relative" } {
     untested "objdir $objdir should be absolute"
index 859c4733f6b09197c543310afe0fcf01e2d114ca..0ef7e1215a44a6a787abe4a8ccde3018013ebc45 100644 (file)
@@ -4349,6 +4349,8 @@ set gdb_saved_set_unbuffered_mode_obj ""
 #   - nowarnings:  Inhibit all compiler warnings.
 #   - pie: Force creation of PIE executables.
 #   - nopie: Prevent creation of PIE executables.
+#   - macros: Add the required compiler flag to include macro information in
+#     debug information
 #
 # And here are some of the not too obscure options understood by DejaGnu that
 # influence the compilation:
@@ -4576,6 +4578,17 @@ proc gdb_compile {source dest type options} {
        lappend options "$flag"
     }
 
+  set macros [lsearch -exact $options macros]
+  if {$macros != -1} {
+      if { [test_compiler_info "clang-*"] } {
+         set flag "additional_flags=-fdebug-macro"
+      } else {
+         set flag "additional_flags=-g3"
+      }
+
+      set options [lreplace $options $macros $macros $flag]
+  }
+
     if { $type == "executable" } {
        if { ([istarget "*-*-mingw*"]
              || [istarget "*-*-*djgpp"]