Improved disassembler a bit
							parent
							
								
									f944f2b20c
								
							
						
					
					
						commit
						15ba74aaf8
					
				|  | @ -1 +1,2 @@ | ||||||
| Slava Pestov | Slava Pestov | ||||||
|  | Jorge Acereda Macia | ||||||
|  |  | ||||||
|  | @ -1,31 +1,43 @@ | ||||||
|  | ! Copyright (C) 2008 Slava Pestov, Jorge Acereda Macia. | ||||||
|  | ! See http://factorcode.org/license.txt for BSD license. | ||||||
| USING: io.files io words alien kernel math.parser alien.syntax | USING: io.files io words alien kernel math.parser alien.syntax | ||||||
| io.launcher system assocs arrays ; | io.launcher system assocs arrays sequences namespaces qualified | ||||||
|  | regexp system math ; | ||||||
|  | QUALIFIED: unix | ||||||
| IN: tools.disassembler | IN: tools.disassembler | ||||||
| 
 | 
 | ||||||
| GENERIC: make-disassemble-cmd ( word -- file ) | : in-file "gdb-in.txt" resource-path ; | ||||||
|  | 
 | ||||||
|  | : out-file "gdb-out.txt" resource-path ; | ||||||
|  | 
 | ||||||
|  | GENERIC: make-disassemble-cmd ( obj -- ) | ||||||
| 
 | 
 | ||||||
| M: word make-disassemble-cmd | M: word make-disassemble-cmd | ||||||
|     word-xt 2array make-disassemble-cmd ; |     word-xt cell - 2array make-disassemble-cmd ; | ||||||
| 
 | 
 | ||||||
| M: pair make-disassemble-cmd | M: pair make-disassemble-cmd | ||||||
|     "gdb.txt" resource-path [ |     in-file [ | ||||||
|         [ |         "attach " write | ||||||
|  |         unix:getpid number>string print | ||||||
|  | 
 | ||||||
|         "disassemble " write |         "disassemble " write | ||||||
|         [ number>string write bl ] each |         [ number>string write bl ] each | ||||||
|         ] with-file-out |     ] with-file-out ; | ||||||
|     ] keep ; |  | ||||||
| 
 | 
 | ||||||
| : run-gdb ( cmds -- output ) | : run-gdb ( -- lines ) | ||||||
|     [ |     [ | ||||||
|         +closed+ +stdin+ set |         +closed+ +stdin+ set | ||||||
|         [ |         out-file +stdout+ set | ||||||
|             "gdb" , |         [ "gdb" , "-x" , in-file , "-batch" , ] { } make +arguments+ set | ||||||
|             vm , |     ] { } make-assoc run-process drop | ||||||
|             getpid number>string , |     out-file file-lines ; | ||||||
|             "-x" , , | 
 | ||||||
|             "-batch" , | : relevant? ( line -- ? ) | ||||||
|         ] { } make +arguments+ set |     R/ 0x.*:.*/ matches? ; | ||||||
|     ] { } make-assoc <process-stream> contents ; | 
 | ||||||
|  | : tabs>spaces ( str -- str' ) | ||||||
|  |     [ dup CHAR: \t = [ drop CHAR: \s ] when ] map ; | ||||||
| 
 | 
 | ||||||
| : disassemble ( word -- ) | : disassemble ( word -- ) | ||||||
|     make-disassemble-cmd run-gdb write ; |     make-disassemble-cmd run-gdb | ||||||
|  |     [ relevant? ] subset [ tabs>spaces ] map [ print ] each ; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue