public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 3/5] Add d_main_name to dlang.c
@ 2014-01-09 13:09 Iain Buclaw
  2014-01-09 18:18 ` Tom Tromey
  0 siblings, 1 reply; 9+ messages in thread
From: Iain Buclaw @ 2014-01-09 13:09 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 357 bytes --]

The main program in D is _Dmain (demangled as 'D main') not C 'main'.
So the logical entry point of the program should be set accordingly.

2014-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>

        * d-lang.h (d_main_name): Add declaration.
        * d-lang.c (d_main_name): New function.
        * symtab.c (find_main_name): Add call to d_main_name.

---

[-- Attachment #2: dlang-p3.patch --]
[-- Type: text/x-patch, Size: 1859 bytes --]

 gdb/ChangeLog |    6 ++++++
 gdb/d-lang.c  |   21 +++++++++++++++++++++
 gdb/d-lang.h  |    4 ++++
 gdb/symtab.c  |    7 +++++++
 4 files changed, 38 insertions(+)

diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 3775e4b..2b5f9c8 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -29,6 +29,27 @@
 
 #include <ctype.h>
 
+/* The name of the symbol to use to get the name of the main subprogram.  */
+static const char D_MAIN[] = "D main";
+
+/* Function returning the special symbol name used by D for the main
+   procedure in the main program if it is found in minimal symbol list.
+   This function tries to find minimal symbols so that it finds them even
+   if the program was compiled without debugging information.  */
+
+const char *
+d_main_name (void)
+{
+  struct minimal_symbol *msym;
+
+  msym = lookup_minimal_symbol (D_MAIN, NULL, NULL);
+  if (msym != NULL)
+    return D_MAIN;
+
+  /* No known entry procedure found, the main program is probably not D.  */
+  return NULL;
+}
+
 /* Extract identifiers from MANGLED_STR and append it to TEMPBUF.
    Return 1 on success or 0 on failure.  */
 static int
diff --git a/gdb/d-lang.h b/gdb/d-lang.h
index 8834a1d..9ede338 100644
--- a/gdb/d-lang.h
+++ b/gdb/d-lang.h
@@ -22,6 +22,10 @@
 
 #include "symtab.h"
 
+/* Defined in d-lang.c  */
+
+extern const char *d_main_name (void);
+
 extern char *d_demangle (const char *mangled, int options);
 
 extern void d_val_print (struct type *type, const gdb_byte *valaddr,
diff --git a/gdb/symtab.c b/gdb/symtab.c
index f215586..4bfff0a 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -5055,6 +5055,13 @@ find_main_name (void)
       return;
     }
 
+  new_main_name = d_main_name ();
+  if (new_main_name != NULL)
+    {
+      set_main_name (new_main_name);
+      return;
+    }
+
   new_main_name = go_main_name ();
   if (new_main_name != NULL)
     {

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-09 13:09 [PATCH 3/5] Add d_main_name to dlang.c Iain Buclaw
@ 2014-01-09 18:18 ` Tom Tromey
  2014-01-09 18:29   ` Iain Buclaw
  2014-01-18 17:09   ` Iain Buclaw
  0 siblings, 2 replies; 9+ messages in thread
From: Tom Tromey @ 2014-01-09 18:18 UTC (permalink / raw)
  To: Iain Buclaw; +Cc: gdb-patches

>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:

Iain> The main program in D is _Dmain (demangled as 'D main') not C 'main'.
Iain> So the logical entry point of the program should be set accordingly.

Iain> 2014-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>

Iain>         * d-lang.h (d_main_name): Add declaration.
Iain>         * d-lang.c (d_main_name): New function.
Iain>         * symtab.c (find_main_name): Add call to d_main_name.

This is ok.

Iain> +static const char D_MAIN[] = "D main";

If D symbols routinely demangle to have spaces in them, then I think
your users may be in for some difficulties using gdb.  Right now I think
linespecs have some hacks to let this work for C++, but I'm not sure how
readily they could be extended to the above.

If it is just the one symbol, then no big deal, there is quoting.

Tom

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-09 18:18 ` Tom Tromey
@ 2014-01-09 18:29   ` Iain Buclaw
  2014-01-10 17:26     ` Iain Buclaw
  2014-01-18 17:09   ` Iain Buclaw
  1 sibling, 1 reply; 9+ messages in thread
From: Iain Buclaw @ 2014-01-09 18:29 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 9 January 2014 18:18, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>
> Iain> The main program in D is _Dmain (demangled as 'D main') not C 'main'.
> Iain> So the logical entry point of the program should be set accordingly.
>
> Iain> 2014-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>
>
> Iain>         * d-lang.h (d_main_name): Add declaration.
> Iain>         * d-lang.c (d_main_name): New function.
> Iain>         * symtab.c (find_main_name): Add call to d_main_name.
>
> This is ok.
>
> Iain> +static const char D_MAIN[] = "D main";
>
> If D symbols routinely demangle to have spaces in them, then I think
> your users may be in for some difficulties using gdb.  Right now I think
> linespecs have some hacks to let this work for C++, but I'm not sure how
> readily they could be extended to the above.
>
> If it is just the one symbol, then no big deal, there is quoting.
>

It's just the one symbol.  'D main' is the demangled name, _Dmain is
the mangled.  Either one works perfectly well with `start`, and when
using cgdb, it sets the start line in the correct place.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-09 18:29   ` Iain Buclaw
@ 2014-01-10 17:26     ` Iain Buclaw
  2014-01-10 18:57       ` Tom Tromey
  0 siblings, 1 reply; 9+ messages in thread
From: Iain Buclaw @ 2014-01-10 17:26 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 9 January 2014 18:29, Iain Buclaw <ibuclaw@gdcproject.org> wrote:
> On 9 January 2014 18:18, Tom Tromey <tromey@redhat.com> wrote:
>>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>>
>> Iain> The main program in D is _Dmain (demangled as 'D main') not C 'main'.
>> Iain> So the logical entry point of the program should be set accordingly.
>>
>> Iain> 2014-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>
>>
>> Iain>         * d-lang.h (d_main_name): Add declaration.
>> Iain>         * d-lang.c (d_main_name): New function.
>> Iain>         * symtab.c (find_main_name): Add call to d_main_name.
>>
>> This is ok.
>>
>> Iain> +static const char D_MAIN[] = "D main";
>>
>> If D symbols routinely demangle to have spaces in them, then I think
>> your users may be in for some difficulties using gdb.  Right now I think
>> linespecs have some hacks to let this work for C++, but I'm not sure how
>> readily they could be extended to the above.
>>
>> If it is just the one symbol, then no big deal, there is quoting.
>>
>
> It's just the one symbol.  'D main' is the demangled name, _Dmain is
> the mangled.  Either one works perfectly well with `start`, and when
> using cgdb, it sets the start line in the correct place.

So would you prefer that _Dmain were used here?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-10 17:26     ` Iain Buclaw
@ 2014-01-10 18:57       ` Tom Tromey
  2014-01-10 19:36         ` Iain Buclaw
  0 siblings, 1 reply; 9+ messages in thread
From: Tom Tromey @ 2014-01-10 18:57 UTC (permalink / raw)
  To: Iain Buclaw; +Cc: gdb-patches

>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:

Iain> So would you prefer that _Dmain were used here?

It's fine as-is.

In that note I was actually asking about the generic problem of
specifying demangled D names to the linespec parser.  But since spaces
don't generally appear there, there's no big issue.  This is kind of
tangential to the patch at hand, just seeing that space made me wonder.

Tom

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-10 18:57       ` Tom Tromey
@ 2014-01-10 19:36         ` Iain Buclaw
  2014-01-10 19:47           ` Tom Tromey
  0 siblings, 1 reply; 9+ messages in thread
From: Iain Buclaw @ 2014-01-10 19:36 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 10 January 2014 18:57, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>
> Iain> So would you prefer that _Dmain were used here?
>
> It's fine as-is.
>
> In that note I was actually asking about the generic problem of
> specifying demangled D names to the linespec parser.  But since spaces
> don't generally appear there, there's no big issue.  This is kind of
> tangential to the patch at hand, just seeing that space made me wonder.
>

Currently all demangled symbols have to be 'quoted' because they are
in the format foo.bar.baz.  Incidentally, I was just looking into
writing a separate expression parser for D (d-exp.y).  I don't suppose
you'd know off the bat whether - if written properly - it would be
able to handle D demangled symbols without the need to quote them?

Thanks
Iain.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-10 19:36         ` Iain Buclaw
@ 2014-01-10 19:47           ` Tom Tromey
  0 siblings, 0 replies; 9+ messages in thread
From: Tom Tromey @ 2014-01-10 19:47 UTC (permalink / raw)
  To: Iain Buclaw; +Cc: gdb-patches

>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:

Iain> Currently all demangled symbols have to be 'quoted' because they are
Iain> in the format foo.bar.baz.  Incidentally, I was just looking into
Iain> writing a separate expression parser for D (d-exp.y).  I don't suppose
Iain> you'd know off the bat whether - if written properly - it would be
Iain> able to handle D demangled symbols without the need to quote them?

I just replied about this on the D debugger list :)

"break" and some other commands use "linespecs", not expressions.
(Well, in addition to expressions, as you can always "break *EXPR".)
See gdb/linespec.c.

linespec already handles "." as a separator for Java, so it should be
possible to make it work for D.  I don't recall the details; this code's
gone through a lot in the past couple of years (for the better I assure
you :-)

Tom

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-09 18:18 ` Tom Tromey
  2014-01-09 18:29   ` Iain Buclaw
@ 2014-01-18 17:09   ` Iain Buclaw
  2014-01-18 18:22     ` Iain Buclaw
  1 sibling, 1 reply; 9+ messages in thread
From: Iain Buclaw @ 2014-01-18 17:09 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 625 bytes --]

On 9 January 2014 18:18, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>
> Iain> The main program in D is _Dmain (demangled as 'D main') not C 'main'.
> Iain> So the logical entry point of the program should be set accordingly.
>
> Iain> 2014-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>
>
> Iain>         * d-lang.h (d_main_name): Add declaration.
> Iain>         * d-lang.c (d_main_name): New function.
> Iain>         * symtab.c (find_main_name): Add call to d_main_name.
>
> This is ok.
>


FYI, this has been amended slightly for the recent change to set_main_name.

[-- Attachment #2: dlang-p3.patch --]
[-- Type: text/x-diff, Size: 1705 bytes --]

diff --git a/gdb/d-lang.c b/gdb/d-lang.c
index 766b5fa..b693829 100644
--- a/gdb/d-lang.c
+++ b/gdb/d-lang.c
@@ -29,6 +29,27 @@
 
 #include <ctype.h>
 
+/* The name of the symbol to use to get the name of the main subprogram.  */
+static const char D_MAIN[] = "D main";
+
+/* Function returning the special symbol name used by D for the main
+   procedure in the main program if it is found in minimal symbol list.
+   This function tries to find minimal symbols so that it finds them even
+   if the program was compiled without debugging information.  */
+
+const char *
+d_main_name (void)
+{
+  struct minimal_symbol *msym;
+
+  msym = lookup_minimal_symbol (D_MAIN, NULL, NULL);
+  if (msym != NULL)
+    return D_MAIN;
+
+  /* No known entry procedure found, the main program is probably not D.  */
+  return NULL;
+}
+
 /* Extract identifiers from MANGLED_STR and append it to TEMPBUF.
    Return 1 on success or 0 on failure.  */
 static int
diff --git a/gdb/d-lang.h b/gdb/d-lang.h
index 8834a1d..9ede338 100644
--- a/gdb/d-lang.h
+++ b/gdb/d-lang.h
@@ -22,6 +22,10 @@
 
 #include "symtab.h"
 
+/* Defined in d-lang.c  */
+
+extern const char *d_main_name (void);
+
 extern char *d_demangle (const char *mangled, int options);
 
 extern void d_val_print (struct type *type, const gdb_byte *valaddr,
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 09b2326..97b85b8 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -5122,6 +5122,13 @@ find_main_name (void)
       return;
     }
 
+  new_main_name = d_main_name ();
+  if (new_main_name != NULL)
+    {
+      set_main_name (new_main_name, language_d);
+      return;
+    }
+
   new_main_name = go_main_name ();
   if (new_main_name != NULL)
     {

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/5] Add d_main_name to dlang.c
  2014-01-18 17:09   ` Iain Buclaw
@ 2014-01-18 18:22     ` Iain Buclaw
  0 siblings, 0 replies; 9+ messages in thread
From: Iain Buclaw @ 2014-01-18 18:22 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches

On 18 January 2014 17:09, Iain Buclaw <ibuclaw@gdcproject.org> wrote:
> On 9 January 2014 18:18, Tom Tromey <tromey@redhat.com> wrote:
>>>>>>> "Iain" == Iain Buclaw <ibuclaw@gdcproject.org> writes:
>>
>> Iain> The main program in D is _Dmain (demangled as 'D main') not C 'main'.
>> Iain> So the logical entry point of the program should be set accordingly.
>>
>> Iain> 2014-01-09  Iain Buclaw  <ibuclaw@gdcproject.org>
>>
>> Iain>         * d-lang.h (d_main_name): Add declaration.
>> Iain>         * d-lang.c (d_main_name): New function.
>> Iain>         * symtab.c (find_main_name): Add call to d_main_name.
>>
>> This is ok.
>>
>
>
> FYI, this has been amended slightly for the recent change to set_main_name.

And committed.

Regards
Iain

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-01-18 18:22 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-09 13:09 [PATCH 3/5] Add d_main_name to dlang.c Iain Buclaw
2014-01-09 18:18 ` Tom Tromey
2014-01-09 18:29   ` Iain Buclaw
2014-01-10 17:26     ` Iain Buclaw
2014-01-10 18:57       ` Tom Tromey
2014-01-10 19:36         ` Iain Buclaw
2014-01-10 19:47           ` Tom Tromey
2014-01-18 17:09   ` Iain Buclaw
2014-01-18 18:22     ` Iain Buclaw

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).