Thanks Tom and Andrew for your comments. Hopefully addressed in the attached updated patch. Please find my below answers for your queries. > We have the files producer.{c,h} that wrap up tests just like this one. If feels like we should add a new test to those files that matches all clang backend based compilers, then make use of this new test throughout. > I'd keep the name of the test fairly generic, the important thing here is the backend technology right, not the frontend language? So if I added a new language with a clang backend I'd likely run into the same issues. Thanks for your suggestion. I have updated the patch for same. > Space before "(". Though the code is moved, I have taken care of the comment in general. > Does it really start with a space? That seems weird. Agreed but it has space at the start. >> +# break main for Flang compiler already breaks here > Do you know why? Line number 46 is the place where breakpoint to main is hit for Flang compiled binary and that looks Okey. Below is the snippet from gdb.fortran/ ------------------------------------------ 16 program vla_struct 17 type :: one 18 integer, allocatable :: ivla (:, :, :) 19 end type one 20 type :: two 21 integer, allocatable :: ivla1 (:, :, :) 22 integer, allocatable :: ivla2 (:, :) 23 end type two 24 type :: three 25 integer :: ivar 26 integer, allocatable :: ivla (:) 27 end type three 28 type :: four 29 integer, allocatable :: ivla (:) 30 integer :: ivar 31 end type four 32 type :: five 33 type(one) :: tone 34 end type five 35 36 type(one), target :: onev 37 type(two) :: twov 38 type(three) :: threev 39 type(four) :: fourv 40 type(five) :: fivev 41 type(five) :: fivearr (2) 42 type(five), allocatable :: fivedynarr (:) 43 logical :: l 44 integer :: i, j 45 46 allocate (onev%ivla (11,22,33)) ! before-allocated 47 l = allocated(onev%ivla) 48 ------------------------------------------ gdb/ChangeLog * 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. gdb/testsuite/ChangeLog * gdb.fortran/vla-type.exp: Skip commands not required for the Flang compiled binaries after prologue fix. Regards, Alok -----Original Message----- From: Andrew Burgess Sent: Tuesday, August 18, 2020 3:59 PM To: Sharma, Alok Kumar Cc: gdb-patches@sourceware.org; George, Jini Susan ; Achra, Nitika Subject: Re: [PATCH] Fix for incorrect breakpoint set in case of flang compiled binary [CAUTION: External Email] * Sharma, Alok Kumar [2020-08-17 15:17:02 +0000]: > Hi All, > > I request you all to please review this patch. Below are the details. > > Problem Description: > Currently, GDB is not able to set a breakpoint at subprogram post > prologue for flang generated binaries. This is due to clang having two > line notes one before and another after the prologue. > Resolution: > Now the end of prologue is determined using symbol table, which was > the way for clang generated binaries already. Since clang and flang > both share same back-end it is true for flang as well. > > gdb/ChangeLog > > * 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. > > gdb/testsuite/ChangeLog > > * gdb.fortran/vla-type.exp: Skip commands not required for > the Flang compiled binaries after prologue fix. > > Regards, > Alok > > > From 6f578b992c789196478742b71af6b75fb76573f3 Mon Sep 17 00:00:00 2001 > From: Alok Kumar Sharma > Date: Mon, 17 Aug 2020 17:04:11 +0530 > Subject: [PATCH] Fix for incorrect breakpoint set in case of flang > compiled binary > > Currently, GDB is not able to set a breakpoint at subprogram post > prologue for flang generated binaries. This is due to clang having two > line notes one before and another after the prologue. > Now the end of prologue is determined using symbol table, which was > the way for clang generated binaries already. Since clang and flang > both share same back-end it is true for flang as well. > > gdb/ChangeLog > > * 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. > > gdb/testsuite/ChangeLog > > * gdb.fortran/vla-type.exp: Skip commands not required for > the Flang compiled binaries after prologue fix. > > Change-Id: I5609f979315effc213feeb6dde6a01a024e0c487 > --- > gdb/ChangeLog | 7 +++++++ > gdb/amd64-tdep.c | 5 +++-- > gdb/arm-tdep.c | 3 ++- > gdb/i386-tdep.c | 5 +++-- > gdb/testsuite/ChangeLog | 5 +++++ > gdb/testsuite/gdb.fortran/vla-type.exp | 8 ++++++-- > 6 files changed, 26 insertions(+), 7 deletions(-) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog index > 3e733a73f0..3eb07cb5d0 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,10 @@ > +2020-08-14 Alok Kumar Sharma > + > + * 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. > + > 2020-08-17 Tom de Vries > > PR gdb/26393 > diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index > 768fe63bdd..6f05f60548 100644 > --- a/gdb/amd64-tdep.c > +++ b/gdb/amd64-tdep.c > @@ -2547,12 +2547,13 @@ amd64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc) > = 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 > + /* Clang/Flang always emit 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 "))) > + && (startswith (COMPUNIT_PRODUCER (cust), "clang ") > + || startswith(COMPUNIT_PRODUCER(cust), " F90 > + Flang")))) > return std::max (start_pc, post_prologue_pc); We have the files producer.{c,h} that wrap up tests just like this one. If feels like we should add a new test to those files that matches all clang backend based compilers, then make use of this new test throughout. I'd keep the name of the test fairly generic, the important thing here is the backend technology right, not the frontend language? So if I added a new language with a clang backend I'd likely run into the same issues. Thanks, Andrew > } > > diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index > 9cedcc8575..27a8b519ed 100644 > --- a/gdb/arm-tdep.c > +++ b/gdb/arm-tdep.c > @@ -1351,7 +1351,8 @@ arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc) > && (cust == NULL > || COMPUNIT_PRODUCER (cust) == NULL > || startswith (COMPUNIT_PRODUCER (cust), "GNU ") > - || startswith (COMPUNIT_PRODUCER (cust), "clang "))) > + || startswith (COMPUNIT_PRODUCER (cust), "clang ") > + || startswith (COMPUNIT_PRODUCER (cust), " F90 Flang"))) > return post_prologue_pc; > > if (post_prologue_pc != 0) > diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index > 9b905c1996..4c1cf3acd7 100644 > --- a/gdb/i386-tdep.c > +++ b/gdb/i386-tdep.c > @@ -1847,12 +1847,13 @@ i386_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc) > = 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 > + /* Clang/Flang always emit 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 "))) > + && (startswith (COMPUNIT_PRODUCER (cust), "clang ") > + || startswith (COMPUNIT_PRODUCER (cust), " F90 > + Flang")))) > return std::max (start_pc, post_prologue_pc); > } > > diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index > f0b7949fd6..9d6e42ad39 100644 > --- a/gdb/testsuite/ChangeLog > +++ b/gdb/testsuite/ChangeLog > @@ -1,3 +1,8 @@ > +2020-08-14 Alok Kumar Sharma > + > + * gdb.fortran/vla-type.exp: Skip commands not required for > + the Flang compiled binaries after prologue fix. > + > 2020-08-16 Tom de Vries > > PR gdb/25350 > diff --git a/gdb/testsuite/gdb.fortran/vla-type.exp > b/gdb/testsuite/gdb.fortran/vla-type.exp > index 925c583edc..e2b8d71b4c 100755 > --- a/gdb/testsuite/gdb.fortran/vla-type.exp > +++ b/gdb/testsuite/gdb.fortran/vla-type.exp > @@ -33,8 +33,12 @@ set int [fortran_int4] > > # 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 = , ivla2 = \\\)" \ > "print twov before allocated" > gdb_test "print twov%ivla1" " = " \ > -- > 2.17.1