diff options
author | Camm Maguire <camm@debian.org> | 2014-09-12 09:35:27 -0400 |
---|---|---|
committer | Camm Maguire <camm@debian.org> | 2014-09-12 09:35:27 -0400 |
commit | 5405fca9720bb31164f90902f719cfff0608e582 (patch) | |
tree | 86fee4e129681e3636e789078913c91d1c33f9c5 | |
parent | 9b45ccd2d9c213f7268932579e147f97f0eb4292 (diff) | |
download | gcl-5405fca9720bb31164f90902f719cfff0608e582.tar.gz |
reorder disassemble-instruction to avoid dis-asm defining DEFUN
-rw-r--r-- | gcl/o/main.c | 94 |
1 files changed, 51 insertions, 43 deletions
diff --git a/gcl/o/main.c b/gcl/o/main.c index decb9f36..41391148 100644 --- a/gcl/o/main.c +++ b/gcl/o/main.c @@ -1068,49 +1068,6 @@ DEFUN("FUNCTION-BY-ADDRESS",object,fSfunction_by_address,SI,1,1,NONE,OI,OO,OO,OO #ifdef PRINT_INSN -#include "dis-asm.h" - -static char b[4096],*bp; - -static int -my_fprintf(void *v,const char *f,...) { - va_list va; - int r; - va_start(va,f); - bp+=(r=vsnprintf(bp,sizeof(b)-(bp-b),f,va)); - va_end(va); - return r; -} - -static int -my_read(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, struct disassemble_info *dinfo) { - memcpy(myaddr,(void *)memaddr,length); - return 0; -} - -static void -my_pa(bfd_vma addr,struct disassemble_info *dinfo) { - dinfo->fprintf_func(dinfo->stream,"%p",(void *)addr); -} - -DEFUN("DISASSEMBLE-INSTRUCTION",object,fSdisassemble_instruction,SI,1,1,NONE,OI,OO,OO,OO,(fixnum addr),"") { - static disassemble_info i; - /* static int k; */ - int j; - - /* if (!k) {init_disassemble_info(&i,NULL,my_fprintf);k=1;} */ - memset(&i,0,sizeof(i)); - i.fprintf_func=my_fprintf; - i.read_memory_func=my_read; - i.print_address_func=my_pa; - bp=b; - - j=PRINT_INSN(addr,&i); - my_fprintf(NULL," ;"); - return MMcons(make_simple_string(b),make_fixnum(j)); -} - - #define MC(b_) v.uc_mcontext.b_ #define REG_LIST(a_,b_) list(3,make_fixnum((void *)&(a_)-(void *)(b_)),make_fixnum(sizeof(a_)),make_fixnum(sizeof(*a_))) #define MCF(b_) (((struct _fpstate *)MC(fpregs))->b_) @@ -1167,4 +1124,55 @@ DEFCONST("+FE-LIST+",sSPfe_listP,SI,list(5, list(3,sLfloating_point_inexact,make_fixnum(FPE_FLTRES),make_fixnum(FE_INEXACT)), list(3,sLfloating_point_invalid_operation,make_fixnum(FPE_FLTINV),make_fixnum(FE_INVALID))),""); +static object disassemble_instruction(fixnum); + +DEFUN("DISASSEMBLE-INSTRUCTION",object,fSdisassemble_instruction,SI,1,1,NONE,OI,OO,OO,OO,(fixnum addr),"") { + return disassemble_instruction(addr); +} + +#include "dis-asm.h" + +static char b[4096],*bp; + +static int +my_fprintf(void *v,const char *f,...) { + va_list va; + int r; + va_start(va,f); + bp+=(r=vsnprintf(bp,sizeof(b)-(bp-b),f,va)); + va_end(va); + return r; +} + +static int +my_read(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, struct disassemble_info *dinfo) { + memcpy(myaddr,(void *)memaddr,length); + return 0; +} + +static void +my_pa(bfd_vma addr,struct disassemble_info *dinfo) { + dinfo->fprintf_func(dinfo->stream,"%p",(void *)addr); +} + +static object +disassemble_instruction(fixnum addr) { + + static disassemble_info i; + /* static int k; */ + int j; + + /* if (!k) {init_disassemble_info(&i,NULL,my_fprintf);k=1;} */ + memset(&i,0,sizeof(i)); + i.fprintf_func=my_fprintf; + i.read_memory_func=my_read; + i.print_address_func=my_pa; + bp=b; + + j=PRINT_INSN(addr,&i); + my_fprintf(NULL," ;"); + return MMcons(make_simple_string(b),make_fixnum(j)); +} + + #endif |