public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v3 14/14] the "compile" command
Date: Sun, 23 Nov 2014 18:36:00 -0000	[thread overview]
Message-ID: <20141123183644.GA31165@host2.jankratochvil.net> (raw)
In-Reply-To: <54625B26.8000309@redhat.com>

On Tue, 11 Nov 2014 19:53:26 +0100, Pedro Alves wrote:
> > +/* See compile-internal.h.  */
> > +
> > +void
> > +gcc_convert_symbol (void *datum,
> > +		    struct gcc_c_context *gcc_context,
> > +		    enum gcc_c_oracle_request request,
> > +		    const char *identifier)
> 
> ...
> 
> > +
> > +  /* We can't allow exceptions to escape out of this callback.  Safest
> > +     is to simply emit a gcc error.  */
> > +  TRY_CATCH (e, RETURN_MASK_ERROR)
> > +    {
> > +      struct symbol *sym;
> 
> Shouldn't this catch ctrl-c too then?  Likewise the other hooks.

Yes, changed.


> > +      for (i = 0; i < 4; ++i)
> 
> It'd be good to give this magic constant a name, or at
> a least a comment.

Added there:
	// Iterate all log2 sizes in bytes supported by c_get_mode_for_size.
Added to c_get_mode_for_size:
	default:
	  internal_error (__FILE__, __LINE__, _("Invalid GCC mode size %d."), size);


> > +	{
> > +	  const char *mode = c_get_mode_for_size (1 << i);
> > +
> > +	  gdb_assert (mode != NULL);
> > +	  fprintf_unfiltered (buf,
> > +			      "typedef int"
> > +			      " __attribute__ ((__mode__(__%s__)))"
> > +			      " __gdb_int_%s;\n",
> > +			      mode, mode);
> > +	}
> 
> 
> 
> > +
> > +/* A cleanup function to remove a directory and all its contents.  */
> > +
> > +static void
> > +do_rmdir (void *arg)
> > +{
> > +  char *zap = concat ("rm -rf ", arg, (char *) NULL);
> > +
> > +  system (zap);
> > +}
> 
> This is quite scary...  Could we please add an assert here
> that tempdir_name starts with "/tmp/gdbobj-", just in case something
> goes really wrong here?

Added:
	/* Initial filename for temporary files.  */

	#define TMP_PREFIX "/tmp/gdbobj-"
+
	#define TEMPLATE TMP_PREFIX "XXXXXX"
+
	gdb_assert (strncmp (dir, TMP_PREFIX, strlen (TMP_PREFIX)) == 0);


> > +  /* Override flags possibly coming from DW_AT_producer.  */
> > +  compile_args = xstrdup ("-O0 -gdwarf-4"
> > +  /* We use -fPIC to ensure that we can reference properly.  Otherwise
> > +     on x86-64 a string constant's address might be truncated when gdb
> > +     loads the object; another approach would be -mcmodel=large, but
> > +     -fPIC seems more portable across back ends.  */
> 
> This comment ends up being a bit unexpected/odd, given that ...
> 
> > +			 " -fPIC"
> > +  /* We don't want warnings.  */
> > +			 " -w"
> 
> ... patch #6 has:
> 
> > +char *
> > +default_gcc_target_options (struct gdbarch *gdbarch)
> > +{
> > +  return xstrprintf ("-m%d%s", gdbarch_ptr_bit (gdbarch),
> > +		     gdbarch_ptr_bit (gdbarch) == 64 ? " -mcmodel=large" : "");
> > +}
> > +
> 
> IOW, is the comment stale?

You are right the comment is stale although the code is not stale.  Up to date
reason for these options I have written in:
	https://sourceware.org/gdb/wiki/GCCCompileAndExecute#Relocating_the_object_file
Therefore put there:
	  /* We use -fPIC Otherwise GDB would need to reserve space large enough for
	     any object file in the inferior in advance to get the final address when
	     to link the object file to and additionally the default system linker
	     script would need to be modified so that one can specify there the
	     absolute target address.  */
				" -fPIC"

And also:
	/* -mcmodel=large is used so that no GOT (Global Offset Table) is needed to be
	   created in inferior memory by GDB (normally it is set by ld.so).  */

	char *
	default_gcc_target_options (struct gdbarch *gdbarch)
	{
	  return xstrprintf ("-m%d%s", gdbarch_ptr_bit (gdbarch),
			     gdbarch_ptr_bit (gdbarch) == 64 ? " -mcmodel=large" : "");
	}


Thanks,
Jan

  reply	other threads:[~2014-11-23 18:36 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-01 21:45 [PATCH v3 00/14] let gdb reuse gcc's C compiler Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 03/14] add some missing ops to DWARF assembler Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 04/14] add make_unqualified_type Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 08/14] introduce call_function_by_hand_dummy Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 02/14] add gcc/gdb interface files Jan Kratochvil
2014-11-03 12:51   ` Yao Qi
2014-11-03 12:56     ` Jan Kratochvil
2014-11-03 13:24       ` Yao Qi
2014-11-01 21:46 ` [PATCH v3 07/14] add gnu_triplet_regexp gdbarch method Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 06/14] add infcall_mmap and gcc_target_options gdbarch methods Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 01/14] introduce ui_file_write_for_put Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 05/14] add dummy frame destructor Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 13/14] add s390_gcc_target_options Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 09/14] split dwarf2_fetch_cfa_info from dwarf2_compile_expr_to_ax Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 11/14] export dwarf2_reg_to_regnum_or_error Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 10/14] make dwarf_expr_frame_base_1 public Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 12/14] add linux_infcall_mmap Jan Kratochvil
2014-11-11 16:43   ` Pedro Alves
2014-11-23 19:11     ` Jan Kratochvil
2014-12-12 14:38       ` Pedro Alves
2014-11-01 21:48 ` [PATCH v3 14/14] the "compile" command Jan Kratochvil
2014-11-02 16:03   ` Eli Zaretskii
2014-11-20 21:24     ` Jan Kratochvil
2014-11-21  7:58       ` Eli Zaretskii
2014-11-21 18:41         ` Jan Kratochvil
2014-11-21 19:47           ` Eli Zaretskii
2014-11-03 13:08   ` Yao Qi
2014-11-14 18:43     ` Jan Kratochvil
2014-11-11 18:53   ` Pedro Alves
2014-11-23 18:36     ` Jan Kratochvil [this message]
2014-12-12 14:38       ` Pedro Alves
2014-11-01 21:52 ` [PATCH v3 00/14] let gdb reuse gcc's C compiler Jan Kratochvil
2014-11-01 21:56 ` Jan Kratochvil
2014-11-03 12:47 ` Yao Qi
2014-11-03 12:49   ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141123183644.GA31165@host2.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).