Fix some AVR test failures.
[deliverable/binutils-gdb.git] / gdb / testsuite / lib / gdb.exp
index 048070b55b26982684600db91ff1197daeb1530c..5a5a8fb403c5a0ce69768357af5f08b28e05b53b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 1992-2015 Free Software Foundation, Inc.
+# Copyright 1992-2016 Free Software Foundation, Inc.
 
 # 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
@@ -959,7 +959,9 @@ proc gdb_test_multiple { command message user_code } {
 # COMMAND is the command to execute, send to GDB with send_gdb.  If
 #   this is the null string no command is sent.
 # PATTERN is the pattern to match for a PASS, and must NOT include
-#   the \r\n sequence immediately before the gdb prompt.
+#   the \r\n sequence immediately before the gdb prompt.  This argument
+#   may be omitted to just match the prompt, ignoring whatever output 
+#   precedes it.
 # MESSAGE is an optional message to be printed.  If this is
 #   omitted, then the pass/fail messages use the command string as the
 #   message.  (If this is the empty string, then sometimes we don't
@@ -974,9 +976,7 @@ proc gdb_test_multiple { command message user_code } {
 #   -1 if there was an internal error.
 #  
 proc gdb_test { args } {
-    global verbose
     global gdb_prompt
-    global GDB
     upvar timeout timeout
 
     if [llength $args]>2 then {
@@ -1906,6 +1906,18 @@ proc with_test_prefix { prefix body } {
   }
 }
 
+# Wrapper for foreach that calls with_test_prefix on each iteration,
+# including the iterator's name and current value in the prefix.
+
+proc foreach_with_prefix {var list body} {
+    upvar 1 $var myvar
+    foreach myvar $list {
+       with_test_prefix "$var=$myvar" {
+           uplevel 1 $body
+       }
+    }
+}
+
 # Run BODY in the context of the caller.  After BODY is run, the variables
 # listed in VARS will be reset to the values they had before BODY was run.
 #
@@ -2185,7 +2197,8 @@ proc supports_process_record {} {
     if { [istarget "arm*-*-linux*"] || [istarget "x86_64-*-linux*"]
          || [istarget "i\[34567\]86-*-linux*"]
          || [istarget "aarch64*-*-linux*"]
-         || [istarget "powerpc*-*-linux*"] } {
+         || [istarget "powerpc*-*-linux*"]
+         || [istarget "s390*-*-linux*"] } {
        return 1
     }
 
@@ -2203,7 +2216,8 @@ proc supports_reverse {} {
     if { [istarget "arm*-*-linux*"] || [istarget "x86_64-*-linux*"]
          || [istarget "i\[34567\]86-*-linux*"]
          || [istarget "aarch64*-*-linux*"]
-         || [istarget "powerpc*-*-linux*"] } {
+         || [istarget "powerpc*-*-linux*"]
+         || [istarget "s390*-*-linux*"] } {
        return 1
     }
 
@@ -2824,6 +2838,9 @@ gdb_caching_proc skip_btrace_pt_tests {
         -re "Could not enable branch tracing.*\r\n$gdb_prompt $" {
             set skip_btrace_tests 1
         }
+        -re "GDB does not support.*\r\n$gdb_prompt $" {
+            set skip_btrace_tests 1
+        }
         -re "^record btrace pt\r\n$gdb_prompt $" {
             set skip_btrace_tests 0
         }
@@ -2835,15 +2852,6 @@ gdb_caching_proc skip_btrace_pt_tests {
     return $skip_btrace_tests
 }
 
-# Skip all the tests in the file if you are not on an hppa running
-# hpux target.
-
-proc skip_hp_tests {} {
-    eval set skip_hp [ expr ![isnative] || ![istarget "hppa*-*-hpux*"] ]
-    verbose "Skip hp tests is $skip_hp"
-    return $skip_hp
-}
-
 # Return whether we should skip tests for showing inlined functions in
 # backtraces.  Requires get_compiler_info and get_debug_format.
 
@@ -3018,25 +3026,33 @@ proc skip_compile_feature_tests {} {
     return $result
 }
 
-# Check whether we're testing with the remote or extended-remote
-# targets.
+# Helper for gdb_is_target_remote.  PROMPT_REGEXP is the expected
+# prompt.
 
-proc gdb_is_target_remote {} {
-    global gdb_prompt
+proc gdb_is_target_remote_prompt { prompt_regexp } {
 
     set test "probe for target remote"
     gdb_test_multiple "maint print target-stack" $test {
-       -re ".*emote serial target in gdb-specific protocol.*$gdb_prompt $" {
+       -re ".*emote serial target in gdb-specific protocol.*$prompt_regexp" {
            pass $test
            return 1
        }
-       -re "$gdb_prompt $" {
+       -re "$prompt_regexp" {
            pass $test
        }
     }
     return 0
 }
 
+# Check whether we're testing with the remote or extended-remote
+# targets.
+
+proc gdb_is_target_remote {} {
+    global gdb_prompt
+
+    return [gdb_is_target_remote_prompt "$gdb_prompt $"]
+}
+
 # Return 1 if the current remote target is an instance of our GDBserver, 0
 # otherwise.  Return -1 if there was an error and we can't tell.
 
@@ -3071,8 +3087,6 @@ if [info exists compiler_info] {
 }
 
 set gcc_compiled               0
-set hp_cc_compiler             0
-set hp_aCC_compiler            0
 
 # Figure out what compiler I am using.
 # The result is cached so only the first invocation runs the compiler.
@@ -3139,8 +3153,6 @@ proc get_compiler_info {{arg ""}} {
 
     # Legacy global data symbols.
     global gcc_compiled
-    global hp_cc_compiler
-    global hp_aCC_compiler
 
     if [info exists compiler_info] {
        # Already computed.
@@ -3201,15 +3213,11 @@ proc get_compiler_info {{arg ""}} {
 
     # Set the legacy symbols.
     set gcc_compiled     0
-    set hp_cc_compiler   0
-    set hp_aCC_compiler  0
     if { [regexp "^gcc-1-" "$compiler_info" ] } { set gcc_compiled 1 }
     if { [regexp "^gcc-2-" "$compiler_info" ] } { set gcc_compiled 2 }
     if { [regexp "^gcc-3-" "$compiler_info" ] } { set gcc_compiled 3 }
     if { [regexp "^gcc-4-" "$compiler_info" ] } { set gcc_compiled 4 }
     if { [regexp "^gcc-5-" "$compiler_info" ] } { set gcc_compiled 5 }
-    if { [regexp "^hpcc-"  "$compiler_info" ] } { set hp_cc_compiler 1 }
-    if { [regexp "^hpacc-" "$compiler_info" ] } { set hp_aCC_compiler 1 }
 
     # Log what happened.
     verbose -log "get_compiler_info: $compiler_info"
@@ -3219,13 +3227,6 @@ proc get_compiler_info {{arg ""}} {
     uplevel \#0 { set true 1 }
     uplevel \#0 { set false 0 }
 
-    # Use of aCC results in boolean results being displayed as
-    # "true" or "false"
-    if { $hp_aCC_compiler } {
-      uplevel \#0 { set true true }
-      uplevel \#0 { set false false }
-    }
-
     return 0
 }
 
@@ -3284,6 +3285,40 @@ proc gdb_wrapper_init { args } {
 global gdb_saved_set_unbuffered_mode_obj
 set gdb_saved_set_unbuffered_mode_obj ""
 
+# Compile source files specified by SOURCE into a binary of type TYPE at path
+# DEST.  gdb_compile is implemented using DejaGnu's target_compile, so the type
+# parameter and most options are passed directly to it.
+#
+# The type can be one of the following:
+#
+#   - object: Compile into an object file.
+#   - executable: Compile and link into an executable.
+#   - preprocess: Preprocess the source files.
+#   - assembly: Generate assembly listing.
+#
+# The following options are understood and processed by gdb_compile:
+#
+#   - shlib=so_path: Add SO_PATH to the sources, and enable some target-specific
+#     quirks to be able to use shared libraries.
+#   - shlib_load: Link with appropriate libraries to allow the test to
+#     dynamically load libraries at runtime.  For example, on Linux, this adds
+#     -ldl so that the test can use dlopen.
+#   - nowarnings:  Inhibit all compiler warnings.
+#
+# And here are some of the not too obscure options understood by DejaGnu that
+# influence the compilation:
+#
+#   - additional_flags=flag: Add FLAG to the compiler flags.
+#   - libs=library: Add LIBRARY to the libraries passed to the linker.  The
+#     argument can be a file, in which case it's added to the sources, or a
+#     linker flag.
+#   - ldflags=flag: Add FLAG to the linker flags.
+#   - incdir=path: Add PATH to the searched include directories.
+#   - libdir=path: Add PATH to the linker searched directories.
+#   - ada, c++, f77: Compile the file as Ada, C++ or Fortran.
+#   - debug: Build with debug information.
+#   - optimize: Build with optimization.
+
 proc gdb_compile {source dest type options} {
     global GDB_TESTCASE_OPTIONS
     global gdb_wrapper_file
@@ -3334,16 +3369,13 @@ proc gdb_compile {source dest type options} {
         }
     }
 
-    # We typically link to shared libraries using an absolute path, and
-    # that's how they are found at runtime.  If we are going to
-    # dynamically load one by basename, we must specify rpath.  If we
-    # are using a remote host, DejaGNU will link to the shared library
-    # using a relative path, so again we must specify an rpath.
-    if { $shlib_load || ($shlib_found && [is_remote target]) } {
+    # Because we link with libraries using their basename, we may need
+    # (depending on the platform) to set a special rpath value, to allow
+    # the executable to find the libraries it depends on.
+    if { $shlib_load || $shlib_found } {
        if { ([istarget "*-*-mingw*"]
              || [istarget *-*-cygwin*]
-             || [istarget *-*-pe*]
-             || [istarget hppa*-*-hpux*])} {
+             || [istarget *-*-pe*]) } {
            # Do not need anything.
        } elseif { [istarget *-*-freebsd*] || [istarget *-*-openbsd*] } {
            lappend new_options "ldflags=-Wl,-rpath,${outdir}"
@@ -3521,15 +3553,11 @@ proc gdb_compile_shlib {sources dest options} {
                 lappend obj_options "additional_flags=-fpic"
             }
         }
+        "icc-*" {
+                lappend obj_options "additional_flags=-fpic"
+        }
         default {
-            switch -glob [istarget] {
-                "hppa*-hp-hpux*" {
-                    lappend obj_options "additional_flags=+z"
-                }
-                default {
-                    # don't know what the compiler is...
-                }
-            }
+           # don't know what the compiler is...
         }
     }
 
@@ -3543,49 +3571,48 @@ proc gdb_compile_shlib {sources dest options} {
        lappend objects ${outdir}/${sourcebase}.o
     }
 
-    if [istarget "hppa*-*-hpux*"] {
-       remote_exec build "ld -b ${objects} -o ${dest}"
+    set link_options $options
+    if [test_compiler_info "xlc-*"] {
+       lappend link_options "additional_flags=-qmkshrobj"
     } else {
-       set link_options $options
-       if [test_compiler_info "xlc-*"] {
-          lappend link_options "additional_flags=-qmkshrobj"
-       } else {
-          lappend link_options "additional_flags=-shared"
-
-          if { ([istarget "*-*-mingw*"]
-                || [istarget *-*-cygwin*]
-                || [istarget *-*-pe*]) } {
-              if { [is_remote host] } {
-                  set name [file tail ${dest}]
-              } else {
-                  set name ${dest}
-              }
-              lappend link_options "additional_flags=-Wl,--out-implib,${name}.a"
-          } elseif [is_remote target] {
-            # By default, we do not set the soname.  This causes the linker
-            # on ELF systems to create a DT_NEEDED entry in the executable
-            # refering to the full path name of the library.  This is a
-            # problem in remote testing if the library is in a different
-            # directory there.  To fix this, we set a soname of just the
-            # base filename for the library, and add an appropriate -rpath
-            # to the main executable (in gdb_compile).
-             set destbase [file tail $dest]
-             lappend link_options "additional_flags=-Wl,-soname,$destbase"
-           }
-       }
-       if {[gdb_compile "${objects}" "${dest}" executable $link_options] != ""} {
-           return -1
-       }
-       if { [is_remote host]
-            && ([istarget "*-*-mingw*"]
-                || [istarget *-*-cygwin*]
-                || [istarget *-*-pe*]) } {
-           set dest_tail_name [file tail ${dest}]
-           remote_upload host $dest_tail_name.a ${dest}.a
-           remote_file host delete $dest_tail_name.a
+       lappend link_options "additional_flags=-shared"
+
+       if { ([istarget "*-*-mingw*"]
+             || [istarget *-*-cygwin*]
+             || [istarget *-*-pe*]) } {
+           if { [is_remote host] } {
+               set name [file tail ${dest}]
+           } else {
+               set name ${dest}
+           }
+           lappend link_options "additional_flags=-Wl,--out-implib,${name}.a"
+       } else {
+           # Set the soname of the library.  This causes the linker on ELF
+           # systems to create the DT_NEEDED entry in the executable referring
+           # to the soname of the library, and not its absolute path.  This
+           # (using the absolute path) would be problem when testing on a
+           # remote target.
+           #
+           # In conjunction with setting the soname, we add the special
+           # rpath=$ORIGIN value when building the executable, so that it's
+           # able to find the library in its own directory.
+           set destbase [file tail $dest]
+           lappend link_options "additional_flags=-Wl,-soname,$destbase"
        }
     }
-  return ""
+    if {[gdb_compile "${objects}" "${dest}" executable $link_options] != ""} {
+       return -1
+    }
+    if { [is_remote host]
+        && ([istarget "*-*-mingw*"]
+            || [istarget *-*-cygwin*]
+            || [istarget *-*-pe*]) } {
+       set dest_tail_name [file tail ${dest}]
+       remote_upload host $dest_tail_name.a ${dest}.a
+       remote_file host delete $dest_tail_name.a
+    }
+
+    return ""
 }
 
 # This is just like gdb_compile_shlib, above, except that it tries compiling
@@ -4159,52 +4186,67 @@ proc gdb_touch_execfile { binfile } {
     }
 }
 
-# Like remote_download but provides a gdb-specific behavior.  If DEST
-# is "host", and the host is not remote, and TOFILE is not specified,
-# then the [file tail] of FROMFILE is passed through
-# standard_output_file to compute the destination.
+# Like remote_download but provides a gdb-specific behavior.
+#
+# If the destination board is remote, the local file FROMFILE is transferred as
+# usual with remote_download to TOFILE on the remote board.  The destination
+# filename is added to the CLEANFILES global, so it can be cleaned up at the
+# end of the test.
+#
+# If the destination board is local, the destination path TOFILE is passed
+# through standard_output_file, and FROMFILE is copied there.
+#
+# In both cases, if TOFILE is omitted, it defaults to the [file tail] of
+# FROMFILE.
 
 proc gdb_remote_download {dest fromfile {tofile {}}} {
-    if {$dest == "host" && ![is_remote host] && $tofile == ""} {
-       set tofile [standard_output_file [file tail $fromfile]]
+    # If TOFILE is not given, default to the same filename as FROMFILE.
+    if {[string length $tofile] == 0} {
+       set tofile [file tail $fromfile]
     }
 
-    if { $tofile == "" } {
-       return [remote_download $dest $fromfile]
+    if {[is_remote $dest]} {
+       # When the DEST is remote, we simply send the file to DEST.
+       global cleanfiles
+
+       set destname [remote_download $dest $fromfile $tofile]
+       lappend cleanfiles $destname
+
+       return $destname
     } else {
-       return [remote_download $dest $fromfile $tofile]
-    }
-}
+       # When the DEST is local, we copy the file to the test directory (where
+       # the executable is).
+       #
+       # Note that we pass TOFILE through standard_output_file, regardless of
+       # whether it is absolute or relative, because we don't want the tests
+       # to be able to write outside their standard output directory.
 
-# gdb_download
-#
-# Copy a file to the remote target and return its target filename.
-# Schedule the file to be deleted at the end of this test.
+       set tofile [standard_output_file $tofile]
 
-proc gdb_download { filename } {
-    global cleanfiles
+       file copy -force $fromfile $tofile
 
-    set destname [remote_download target $filename]
-    lappend cleanfiles $destname
-    return $destname
+       return $tofile
+    }
 }
 
-# gdb_load_shlibs LIB...
+# gdb_load_shlib LIB...
 #
-# Copy the listed libraries to the target.
+# Copy the listed library to the target.
 
-proc gdb_load_shlibs { args } {
-    if {![is_remote target]} {
-       return
-    }
+proc gdb_load_shlib { file } {
+    set dest [gdb_remote_download target [shlib_target_file $file]]
 
-    foreach file $args {
-       gdb_download [shlib_target_file $file]
+    if {[is_remote target]} {
+       # If the target is remote, we need to tell gdb where to find the
+       # libraries.
+       #
+       # We could set this even when not testing remotely, but a user
+       # generally won't set it unless necessary.  In order to make the tests
+       # more like the real-life scenarios, we don't set it for local testing.
+       gdb_test "set solib-search-path [file dirname $file]" "" ""
     }
 
-    # Even if the target supplies full paths for shared libraries,
-    # they may not be paths for this system.
-    gdb_test "set solib-search-path [file dirname [lindex $args 0]]" "" ""
+    return $dest
 }
 
 #
@@ -4293,7 +4335,7 @@ proc default_gdb_init { test_file_name } {
 proc make_gdb_parallel_path { args } {
     global GDB_PARALLEL objdir
     set joiner [list "file" "join" $objdir]
-    if { $GDB_PARALLEL != "yes" } {
+    if { [info exists GDB_PARALLEL] && $GDB_PARALLEL != "yes" } {
        lappend joiner $GDB_PARALLEL
     }
     set joiner [concat $joiner $args]
@@ -4305,27 +4347,22 @@ proc make_gdb_parallel_path { args } {
 # the directory is returned.
 
 proc standard_output_file {basename} {
-    global objdir subdir gdb_test_file_name GDB_PARALLEL
+    global objdir subdir gdb_test_file_name
 
-    if {[info exists GDB_PARALLEL]} {
-       set dir [make_gdb_parallel_path outputs $subdir $gdb_test_file_name]
-       file mkdir $dir
-       return [file join $dir $basename]
-    } else {
-       return [file join $objdir $subdir $basename]
-    }
+    set dir [make_gdb_parallel_path outputs $subdir $gdb_test_file_name]
+    file mkdir $dir
+    return [file join $dir $basename]
 }
 
 # Return the name of a file in our standard temporary directory.
 
 proc standard_temp_file {basename} {
-    global objdir GDB_PARALLEL
-
-    if {[info exists GDB_PARALLEL]} {
-       return [make_gdb_parallel_path temp $basename]
-    } else {
-       return $basename
-    }
+    # Since a particular runtest invocation is only executing a single test
+    # file at any given time, we can use the runtest pid to build the
+    # path of the temp directory.
+    set dir [make_gdb_parallel_path temp [pid]]
+    file mkdir $dir
+    return [file join $dir $basename]
 }
 
 # Set 'testfile', 'srcfile', and 'binfile'.
@@ -4882,24 +4919,44 @@ gdb_caching_proc gdb_has_argv0 {
            }
        }
 
+       set old_elements "200"
+       set test "show print elements"
+       gdb_test_multiple $test $test {
+           -re "Limit on string chars or array elements to print is (\[^\r\n\]+)\\.\r\n$gdb_prompt $" {
+               set old_elements $expect_out(1,string)
+           }
+       }
+       set old_repeats "200"
+       set test "show print repeats"
+       gdb_test_multiple $test $test {
+           -re "Threshold for repeated print elements is (\[^\r\n\]+)\\.\r\n$gdb_prompt $" {
+               set old_repeats $expect_out(1,string)
+           }
+       }
+       gdb_test_no_output "set print elements unlimited" ""
+       gdb_test_no_output "set print repeats unlimited" ""
+
+       set retval 0
        # Check whether argc is 1.
        gdb_test_multiple "p argc" "p argc" {
            -re " = 1\r\n${gdb_prompt} $" {
 
                gdb_test_multiple "p argv\[0\]" "p argv\[0\]" {
                    -re " = $hex \".*[file tail $exe]\"\r\n${gdb_prompt} $" {
-                       return 1
+                       set retval 1
                    }
                    -re "${gdb_prompt} $" {
-                       return 0
                    }
                }
            }
            -re "${gdb_prompt} $" {
-               return 0
            }
        }
-       return 0
+       
+       gdb_test_no_output "set print elements $old_elements" ""
+       gdb_test_no_output "set print repeats $old_repeats" ""
+
+       return $retval
     }
 
     set result [gdb_has_argv0_1 $exe]
@@ -4922,7 +4979,6 @@ gdb_caching_proc gdb_has_argv0 {
          || [istarget *-wince-pe] || [istarget *-*-mingw32ce*]
          || [istarget *-*-symbianelf*]
          || [istarget *-*-osf*]
-         || [istarget *-*-hpux*]
          || [istarget *-*-dicos*]
          || [istarget *-*-nto*]
          || [istarget *-*-*vms*]
@@ -5521,18 +5577,96 @@ proc core_find {binfile {deletefiles {}} {arg ""}} {
     return $destcore
 }
 
-# gdb_target_symbol_prefix_flags returns a string that can be added
-# to gdb_compile options to define SYMBOL_PREFIX macro value
-# symbol_prefix_flags returns a string that can be added
-# for targets that use underscore as symbol prefix.
-# TODO: find out automatically if the target needs this.
+# gdb_target_symbol_prefix compiles a test program and then examines
+# the output from objdump to determine the prefix (such as underscore)
+# for linker symbol prefixes.
+
+gdb_caching_proc gdb_target_symbol_prefix {
+    # Set up and compile a simple test program...
+    set src [standard_temp_file main[pid].c]
+    set exe [standard_temp_file main[pid].x]
+
+    gdb_produce_source $src {
+       int main() {
+           return 0;
+       }
+    }
+
+    verbose "compiling testfile $src" 2
+    set compile_flags {debug nowarnings quiet}
+    set lines [gdb_compile $src $exe executable $compile_flags]
+
+    set prefix ""
+
+    if ![string match "" $lines] then {
+        verbose "gdb_target_symbol_prefix: testfile compilation failed, returning null prefix" 2
+    } else {
+       set objdump_program [gdb_find_objdump]
+       set result [catch "exec $objdump_program --syms $exe" output]
+
+       if { $result == 0 \
+            && ![regexp -lineanchor \
+                 { ([^ a-zA-Z0-9]*)main$} $output dummy prefix] } {
+           verbose "gdb_target_symbol_prefix: Could not find main in objdump output; returning null prefix" 2
+       }
+    }
+
+    file delete $src
+    file delete $exe
+
+    return $prefix
+}
+
+# gdb_target_symbol returns the provided symbol with the correct prefix
+# prepended.  (See gdb_target_symbol_prefix, above.)
+
+proc gdb_target_symbol { symbol } {
+  set prefix [gdb_target_symbol_prefix]
+  return "${prefix}${symbol}"
+}
+
+# gdb_target_symbol_prefix_flags_asm returns a string that can be
+# added to gdb_compile options to define the C-preprocessor macro
+# SYMBOL_PREFIX with a value that can be prepended to symbols
+# for targets which require a prefix, such as underscore.
+#
+# This version (_asm) defines the prefix without double quotes
+# surrounding the prefix.  It is used to define the macro
+# SYMBOL_PREFIX for assembly language files.  Another version, below,
+# is used for symbols in inline assembler in C/C++ files.
+# 
+# The lack of quotes in this version (_asm) makes it possible to
+# define supporting macros in the .S file.  (The version which
+# uses quotes for the prefix won't work for such files since it's
+# impossible to define a quote-stripping macro in C.)
+#
+# It's possible to use this version (_asm) for C/C++ source files too,
+# but a string is usually required in such files; providing a version
+# (no _asm) which encloses the prefix with double quotes makes it
+# somewhat easier to define the supporting macros in the test case.
+
+proc gdb_target_symbol_prefix_flags_asm {} {
+    set prefix [gdb_target_symbol_prefix]
+    if {$prefix ne ""} {
+       return "additional_flags=-DSYMBOL_PREFIX=$prefix"
+    } else {
+       return "";
+    }
+}
+
+# gdb_target_symbol_prefix_flags returns the same string as
+# gdb_target_symbol_prefix_flags_asm, above, but with the prefix
+# enclosed in double quotes if there is a prefix.
+#
+# See the comment for gdb_target_symbol_prefix_flags_asm for an
+# extended discussion.
 
 proc gdb_target_symbol_prefix_flags {} {
-    if { [istarget "i?86-*-cygwin*"] || [istarget "i?86-*-mingw*"]
-        || [istarget "*-*-msdosdjgpp*"] || [istarget "*-*-go32*"] } {
-       return "additional_flags=-DSYMBOL_PREFIX=\"_\""
+    set prefix [gdb_target_symbol_prefix]
+    if {$prefix ne ""} {
+       return "additional_flags=-DSYMBOL_PREFIX=\"$prefix\""
     } else {
-       return ""
+       return "";
     }
 }
 
This page took 0.032677 seconds and 4 git commands to generate.