public inbox for sid@sourceware.org
 help / color / mirror / Atom feed
From: Dave Brolley <brolley@redhat.com>
To: Dave Brolley <brolley@redhat.com>
Cc: sid@sources.redhat.com
Subject: Re: [patch][rfa] Support multiple bfd machines in cgen-cpu disassembly
Date: Tue, 29 Jun 2004 16:09:00 -0000	[thread overview]
Message-ID: <40E19398.7020205@redhat.com> (raw)
In-Reply-To: <40DB3B97.9040606@redhat.com>

Approved by fche and committed.

Dave Brolley wrote:

> Hi,
>
> Currently the 'mach' file of the disassemble_info struct initialized 
> by cgen_disassemble is left with the default value of 0, which 
> indicates to use the default bfd machine. This patch allows the 
> specification of a bfd machine number, so that targets with multiple 
> cgen MACHs can filter the insn set correctly when disassembling.
>
> The machine number is an optional argument to 
> cgen_bi_endian_cpu::disassemble with a default value of zero, to 
> preserve the current behaviour in ports which don't use this feature. 
> The machine number is then passed to cgen_disassemble which stores it 
> in the disassemble_info for use by the disassembler. The machine 
> number is also stored in the bfd_arch_hack struct by register_name and 
> is compared against the requested machine number in bfd_lookup_arch.
>
> This has been tested against an internal port which uses this feature 
> and against xstormy16 which does not.
>
> ok to commit?
>
> Dave
>
>------------------------------------------------------------------------
>
>Index: sid/component/cgen-cpu/cgen-cpu.h
>===================================================================
>RCS file: /cvs/src/src/sid/component/cgen-cpu/cgen-cpu.h,v
>retrieving revision 1.9
>diff -c -p -r1.9 cgen-cpu.h
>*** sid/component/cgen-cpu/cgen-cpu.h	15 Jan 2003 20:04:57 -0000	1.9
>--- sid/component/cgen-cpu/cgen-cpu.h	24 Jun 2004 20:13:52 -0000
>***************
>*** 1,6 ****
>  // cgen-cpu.h  -*- C++ -*-
>  
>! // Copyright (C) 2000, 2001, 2002, 2003 Red Hat.
>  // This file is part of SID and is licensed under the GPL.
>  // See the file COPYING.SID for conditions for redistribution.
>  
>--- 1,6 ----
>  // cgen-cpu.h  -*- C++ -*-
>  
>! // Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat.
>  // This file is part of SID and is licensed under the GPL.
>  // See the file COPYING.SID for conditions for redistribution.
>  
>*************** public:
>*** 68,74 ****
>    // Disassembly tracing support
>    void disassemble (PCADDR pc, disassembler_ftype printfn,
>  		    enum bfd_flavour flavour, enum bfd_architecture arch,
>! 		    enum bfd_endian endian, const char *name, unsigned long isa_mask = 0);
>    struct disassemble_info info;
>  protected:
>    static int cgen_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
>--- 68,74 ----
>    // Disassembly tracing support
>    void disassemble (PCADDR pc, disassembler_ftype printfn,
>  		    enum bfd_flavour flavour, enum bfd_architecture arch,
>! 		    enum bfd_endian endian, const char *name, unsigned long isa_mask = 0, int machine = 0);
>    struct disassemble_info info;
>  protected:
>    static int cgen_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
>Index: sid/component/cgen-cpu/compCGEN.cxx
>===================================================================
>RCS file: /cvs/src/src/sid/component/cgen-cpu/compCGEN.cxx,v
>retrieving revision 1.12
>diff -c -p -r1.12 compCGEN.cxx
>*** sid/component/cgen-cpu/compCGEN.cxx	29 Aug 2003 19:26:22 -0000	1.12
>--- sid/component/cgen-cpu/compCGEN.cxx	24 Jun 2004 20:13:52 -0000
>***************
>*** 1,6 ****
>  // compCGEN.cxx - CPU components.  -*- C++ -*-
>  
>! // Copyright (C) 1999, 2000, 2001, 2002, 2003 Red Hat.
>  // This file is part of SID and is licensed under the GPL.
>  // See the file COPYING.SID for conditions for redistribution.
>  
>--- 1,6 ----
>  // compCGEN.cxx - CPU components.  -*- C++ -*-
>  
>! // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Red Hat.
>  // This file is part of SID and is licensed under the GPL.
>  // See the file COPYING.SID for conditions for redistribution.
>  
>*************** cgen::cgen_bi_endian_cpu::disassemble (P
>*** 155,161 ****
>    enum bfd_architecture arch,
>    enum bfd_endian endian,
>    const char *name,
>!   unsigned long isa_mask)
>  {
>    cgen_disassemble((bfd_vma)pc, &this->info, this,
>                     & cgen_bi_endian_cpu::cgen_read_memory,
>--- 155,162 ----
>    enum bfd_architecture arch,
>    enum bfd_endian endian,
>    const char *name,
>!   unsigned long isa_mask,
>!   int machine)
>  {
>    cgen_disassemble((bfd_vma)pc, &this->info, this,
>                     & cgen_bi_endian_cpu::cgen_read_memory,
>*************** cgen::cgen_bi_endian_cpu::disassemble (P
>*** 165,170 ****
>--- 166,172 ----
>                     printfn,
>                     flavour,
>                     arch,
>+ 		   machine,
>                     endian,
>  		   name,
>  		   isa_mask);
>Index: sid/component/cgen-cpu/tracedis.cxx
>===================================================================
>RCS file: /cvs/src/src/sid/component/cgen-cpu/tracedis.cxx,v
>retrieving revision 1.3
>diff -c -p -r1.3 tracedis.cxx
>*** sid/component/cgen-cpu/tracedis.cxx	26 Mar 2004 20:23:40 -0000	1.3
>--- sid/component/cgen-cpu/tracedis.cxx	24 Jun 2004 20:13:52 -0000
>***************
>*** 1,6 ****
>  // tracedis.cxx - disassembly tracing support.  -*- C++ -*-
>  
>! // Copyright (C) 2001, 2002 Red Hat.
>  // This file is part of SID and is licensed under the GPL.
>  // See the file COPYING.SID for conditions for redistribution.
>  
>--- 1,6 ----
>  // tracedis.cxx - disassembly tracing support.  -*- C++ -*-
>  
>! // Copyright (C) 2001-2004 Red Hat.
>  // This file is part of SID and is licensed under the GPL.
>  // See the file COPYING.SID for conditions for redistribution.
>  
>***************
>*** 12,18 ****
>  #include "sidcomputil.h"
>  #include "sidcpuutil.h"
>  
>! void register_name(enum bfd_architecture, const char *);
>  
>  // XXX: for compatibility with older libraries
>  static
>--- 12,18 ----
>  #include "sidcomputil.h"
>  #include "sidcpuutil.h"
>  
>! void register_name(enum bfd_architecture, const char *, int);
>  
>  // XXX: for compatibility with older libraries
>  static
>*************** cgen_disassemble(bfd_vma pc,
>*** 41,56 ****
>  		 disassembler_ftype fp,
>  		 enum bfd_flavour flavour,
>  		 enum bfd_architecture arch,
>  		 enum bfd_endian endian,
>  		 const char *name,
>  		 unsigned long isa_mask)
>  {
>!   register_name(arch, name);
>    INIT_DISASSEMBLE_INFO(*info, this_ptr, trace_printf);
>    info->application_data = this_ptr;
>    info->flavour = flavour;
>    info->insn_sets = isa_mask; /* may be 0 */
>    info->arch = arch;
>    info->endian = endian;
>    info->read_memory_func = read_mem_func;
>    info->memory_error_func = memory_error_func;
>--- 41,58 ----
>  		 disassembler_ftype fp,
>  		 enum bfd_flavour flavour,
>  		 enum bfd_architecture arch,
>+ 		 int machine,
>  		 enum bfd_endian endian,
>  		 const char *name,
>  		 unsigned long isa_mask)
>  {
>!   register_name(arch, name, machine);
>    INIT_DISASSEMBLE_INFO(*info, this_ptr, trace_printf);
>    info->application_data = this_ptr;
>    info->flavour = flavour;
>    info->insn_sets = isa_mask; /* may be 0 */
>    info->arch = arch;
>+   info->mach = machine;
>    info->endian = endian;
>    info->read_memory_func = read_mem_func;
>    info->memory_error_func = memory_error_func;
>*************** bfd_get_bits (const void* addr, int bits
>*** 174,186 ****
>  struct bfd_arch_hack {
>    struct bfd_arch_hack *next;
>    enum bfd_architecture arch;
>    const char *name;
>  };
>  
>  struct bfd_arch_hack *hack_list;
>  
>  void
>! register_name(enum bfd_architecture arch, const char *name)
>  {
>    struct bfd_arch_hack *p;
>  
>--- 176,189 ----
>  struct bfd_arch_hack {
>    struct bfd_arch_hack *next;
>    enum bfd_architecture arch;
>+   int machine;
>    const char *name;
>  };
>  
>  struct bfd_arch_hack *hack_list;
>  
>  void
>! register_name(enum bfd_architecture arch, const char *name, int machine)
>  {
>    struct bfd_arch_hack *p;
>  
>*************** register_name(enum bfd_architecture arch
>*** 189,194 ****
>--- 192,198 ----
>        hack_list = (struct bfd_arch_hack *)xmalloc(sizeof *hack_list);
>        hack_list->next = NULL;
>        hack_list->arch = arch;
>+       hack_list->machine = machine;
>        hack_list->name = name;
>        return;
>      }
>*************** register_name(enum bfd_architecture arch
>*** 197,207 ****
>--- 201,213 ----
>      if (strcmp(p->name, name) == 0)
>        {
>  	p->arch = arch;
>+ 	p->machine = machine;
>  	return;
>        }
>    p = (struct bfd_arch_hack *)xmalloc(sizeof *hack_list);
>    p->next = hack_list;
>    p->arch = arch;
>+   p->machine = machine;
>    p->name = name;
>  }
>  
>*************** bfd_lookup_arch (enum bfd_architecture a
>*** 213,219 ****
>  
>    for (b = hack_list; b->name; b++)
>      {
>!       if (b->arch == arch)
>  	{
>            info.printable_name = b->name;
>            return &info;
>--- 219,225 ----
>  
>    for (b = hack_list; b->name; b++)
>      {
>!       if (b->arch == arch && b->machine == machine)
>  	{
>            info.printable_name = b->name;
>            return &info;
>Index: sid/component/cgen-cpu/tracedis.h
>===================================================================
>RCS file: /cvs/src/src/sid/component/cgen-cpu/tracedis.h,v
>retrieving revision 1.2
>diff -c -p -r1.2 tracedis.h
>*** sid/component/cgen-cpu/tracedis.h	7 Feb 2002 17:32:28 -0000	1.2
>--- sid/component/cgen-cpu/tracedis.h	24 Jun 2004 20:13:52 -0000
>*************** typedef void (*MEMERR)(int status, bfd_v
>*** 9,12 ****
>  typedef void (*PRINTADDR)(bfd_vma addr, struct disassemble_info *info);
>  typedef int (*SYMATADDR)(bfd_vma addr, struct disassemble_info * info);
>  
>! void cgen_disassemble(bfd_vma, disassemble_info *, void *, READMEM, MEMERR, PRINTADDR, SYMATADDR, disassembler_ftype, enum bfd_flavour, enum bfd_architecture, enum bfd_endian, const char *, unsigned long isa_mask);
>--- 9,12 ----
>  typedef void (*PRINTADDR)(bfd_vma addr, struct disassemble_info *info);
>  typedef int (*SYMATADDR)(bfd_vma addr, struct disassemble_info * info);
>  
>! void cgen_disassemble(bfd_vma, disassemble_info *, void *, READMEM, MEMERR, PRINTADDR, SYMATADDR, disassembler_ftype, enum bfd_flavour, enum bfd_architecture, int machine, enum bfd_endian, const char *, unsigned long isa_mask);
>  
>
>------------------------------------------------------------------------
>
>2004-06-21  Dave Brolley  <brolley@redhat.com>
>
>	* tracedis.cxx (register_name): Add parameter for the cgen MACH. Save
>	it in hack_list->machine or p->machine.
>	(cgen_disassemble): Add parameter for the cgen MACH. Pass it to
>	register_name. Use it to set info->mach.
>	(arch_hack): New field 'machine'.
>	(bfd_lookup_arch): Make sure the machines match.
>	* cgen-cpu.h (disassemble): Add parameter for the cgen MACH.
>	* compCGEN.cxx (disassemble): Add parameter for the cgen MACH. Pass it
>	to cgen_disassemble.
>	* tracedis.h (cgen_disassemble): Add parameter for the cgen MACH.
>
>  
>

      reply	other threads:[~2004-06-29 16:09 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-24 20:37 Dave Brolley
2004-06-29 16:09 ` Dave Brolley [this message]

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=40E19398.7020205@redhat.com \
    --to=brolley@redhat.com \
    --cc=sid@sources.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).