+2020-08-19 Alok Kumar Sharma <AlokKumar.Sharma@amd.com>
+
+ * amd64-tdep.c (amd64_skip_prologue): Using symbol table
+ to find the end of prologue for flang compiled binaries.
+ * arm-tdep.c (arm_skip_prologue): Likewise.
+ * i386-tdep.c (i386_skip_prologue): Likewise.
+ * producer.c (producer_is_llvm): New function.
+ (producer_parsing_tests): Added new tests for clang/flang.
+ * producer.h (producer_is_llvm): New declaration.
+
2020-08-18 Simon Marchi <simon.marchi@efficios.com>
* linux-nat.c (linux_nat_debug_printf): New function.
= skip_prologue_using_sal (gdbarch, func_addr);
struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
- /* Clang always emits a line note before the prologue and another
- one after. We trust clang to emit usable line notes. */
+ /* LLVM backend (Clang/Flang) always emits a line note before the
+ prologue and another one after. We trust clang to emit usable
+ line notes. */
if (post_prologue_pc
&& (cust != NULL
&& COMPUNIT_PRODUCER (cust) != NULL
- && startswith (COMPUNIT_PRODUCER (cust), "clang ")))
+ && producer_is_llvm (COMPUNIT_PRODUCER (cust))))
return std::max (start_pc, post_prologue_pc);
}
#include "record-full.h"
#include <algorithm>
+#include "producer.h"
+
#if GDB_SELF_TEST
#include "gdbsupport/selftest.h"
#endif
&& (cust == NULL
|| COMPUNIT_PRODUCER (cust) == NULL
|| startswith (COMPUNIT_PRODUCER (cust), "GNU ")
- || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
+ || producer_is_llvm (COMPUNIT_PRODUCER (cust))))
return post_prologue_pc;
if (post_prologue_pc != 0)
#include <ctype.h>
#include <algorithm>
#include <unordered_set>
+#include "producer.h"
/* Register names. */
= skip_prologue_using_sal (gdbarch, func_addr);
struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
- /* Clang always emits a line note before the prologue and another
- one after. We trust clang to emit usable line notes. */
+ /* LLVM backend (Clang/Flang) always emits a line note before the
+ prologue and another one after. We trust clang to emit usable
+ line notes. */
if (post_prologue_pc
&& (cust != NULL
&& COMPUNIT_PRODUCER (cust) != NULL
- && startswith (COMPUNIT_PRODUCER (cust), "clang ")))
+ && producer_is_llvm (COMPUNIT_PRODUCER (cust))))
return std::max (start_pc, post_prologue_pc);
}
return false;
}
+/* See producer.h. */
+
+bool
+producer_is_llvm (const char *producer)
+{
+ return ((producer != NULL) && (startswith (producer, "clang ")
+ || startswith (producer, " F90 Flang ")));
+}
+
#if defined GDB_SELF_TEST
namespace selftests {
namespace producer {
SELF_CHECK (producer_is_gcc (gnu_exp, &major, &minor)
&& major == 5 && minor == 0);
}
+
+ {
+ static const char clang_llvm_exp[] = "clang version 12.0.0 (CLANG: bld#8)";
+ int major = 0, minor = 0;
+ SELF_CHECK (!producer_is_icc (clang_llvm_exp, NULL, NULL));
+ SELF_CHECK (!producer_is_gcc (clang_llvm_exp, &major, &minor));
+ SELF_CHECK (producer_is_llvm (clang_llvm_exp));
+ }
+
+ {
+ static const char flang_llvm_exp[] = " F90 Flang - 1.5 2017-05-01";
+ int major = 0, minor = 0;
+ SELF_CHECK (!producer_is_icc (flang_llvm_exp, NULL, NULL));
+ SELF_CHECK (!producer_is_gcc (flang_llvm_exp, &major, &minor));
+ SELF_CHECK (producer_is_llvm (flang_llvm_exp));
+ }
}
}
}
running on Intel(R) 64, Version 18.0 Beta ....". */
extern bool producer_is_icc (const char *producer, int *major, int *minor);
+/* Returns true if the given PRODUCER string is LLVM (clang/flang) or
+ false otherwise.*/
+extern bool producer_is_llvm (const char *producer);
+
#endif
+2020-08-19 Alok Kumar Sharma <AlokKumar.Sharma@amd.com>
+
+ * gdb.fortran/vla-type.exp: Skip commands not required for
+ the Flang compiled binaries after prologue fix.
+
2020-08-17 Tom de Vries <tdevries@suse.de>
Tom Tromey <tromey@adacore.com>
# Check if not allocated VLA in type does not break
# the debugger when accessing it.
-gdb_breakpoint [gdb_get_line_number "before-allocated"]
-gdb_continue_to_breakpoint "before-allocated"
+# break main for Flang compiler already breaks here
+if ![test_compiler_info "clang-*"] {
+ gdb_breakpoint [gdb_get_line_number "before-allocated"]
+ gdb_continue_to_breakpoint "before-allocated"
+}
+
gdb_test "print twov" " = \\\( ivla1 = <not allocated>, ivla2 = <not allocated> \\\)" \
"print twov before allocated"
gdb_test "print twov%ivla1" " = <not allocated>" \