20821f4 gdb: Allow target description to be dumped even when it is remote

Authored and Committed by Andrew Burgess 3 years ago
    gdb: Allow target description to be dumped even when it is remote
    
    The maintenance command 'maintenance print c-tdesc' can only print the
    target description if it was loaded from a local file, or if the local
    filename is passed to the maintenance command as an argument.
    
    Sometimes it would be nice to know what target description GDB was
    given by the remote, however, if I connect to a remote target and try
    this command I see this:
    
      (gdb) maintenance print c-tdesc
      The current target description did not come from an XML file.
      (gdb)
    
    Which is not very helpful.
    
    This commit changes things so that if the description came from the
    remote end then GDB will use a fake filename 'fetched from target' as
    the filename for the description, GDB will then create the C
    description of the target as though it came from this file.  Example
    output would look like this (I snipped the feature creation from the
    middle as that hasn't changed):
    
      (gdb) maintenance print c-tdesc
      /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
        Original: fetched from target */
    
      #include "defs.h"
      #include "osabi.h"
      #include "target-descriptions.h"
    
      struct target_desc *tdesc_fetched_from_target;
      static void
      initialize_tdesc_fetched_from_target (void)
      {
        struct target_desc *result = allocate_target_description ();
        struct tdesc_feature *feature;
    
        /* ... features created here ... */
    
        tdesc_fetched_from_target = result;
      }
      (gdb)
    
    In order to support using 'fetched from target' I had to update the
    print_c_tdesc code to handle filenames that include a space.  This has
    the benefit that we can now print out real files with spaces in the
    name, for example the file 'with space.xml':
    
      (gdb) maint print c-tdesc with space.xml
    
    I originally added this functionality so I could inspect the
    description passed to GDB by the remote target.  After using this for
    a while I realised that actually having GDB recreate the XML would be
    even better, so a later commit will add that functionality too.
    
    Still, given how small this patch is I thought it might be nice to
    include this in GDB anyway.
    
    While I was working on this anyway I've added filename command
    completion to this command.
    
    gdb/ChangeLog:
    
    	* target-descriptions.c (print_c_tdesc::print_c_tdesc): Change
    	whitespace to underscore.
    	(maint_print_c_tdesc_cmd): Use fake filename for target
    	descriptions that came from the target.
    	(_initialize_target_descriptions): Add filename command completion
    	for 'maint print c-tdesc'.
    
        
file modified
+9 -0
file modified
+7 -4