gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gcl-devel] [PATCH 04/11] Reorder code to avoid problems with dis-asm.h


From: Will Newton
Subject: [Gcl-devel] [PATCH 04/11] Reorder code to avoid problems with dis-asm.h defining DEFUN.
Date: Wed, 11 Jun 2014 17:27:17 +0100

From: Will Newton <address@hidden>

---
 gcl/o/main.c | 77 ++++++++++++++++++++++++++++++++----------------------------
 1 file changed, 41 insertions(+), 36 deletions(-)

diff --git a/gcl/o/main.c b/gcl/o/main.c
index 7e5bee7..c8defb7 100644
--- a/gcl/o/main.c
+++ b/gcl/o/main.c
@@ -1068,46 +1068,12 @@ 
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);
-}
+static object disassemble_instruction(fixnum 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));
+  return disassemble_instruction(addr);
 }
 
 
@@ -1167,4 +1133,43 @@ 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))),"");
 
+#include "dis-asm.h"
+
+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;
+  int j;
+
+  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
-- 
1.9.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]