Print this page
3317 dis(1) should support cross-target disassembly

Split Close
Expand all
Collapse all
          --- old/usr/src/lib/libdisasm/common/libdisasm.h
          +++ new/usr/src/lib/libdisasm/common/libdisasm.h
↓ open down ↓ 14 lines elided ↑ open up ↑
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
       25 + * Copyright 2012 Joshua M. Clulow <josh@sysmgr.org>
  25   26   */
  26   27  
  27   28  #ifndef _LIBDISASM_H
  28   29  #define _LIBDISASM_H
  29   30  
  30   31  #include <sys/types.h>
  31   32  
  32   33  #ifdef  __cplusplus
  33   34  extern "C" {
  34   35  #endif
  35   36  
  36   37  typedef struct dis_handle dis_handle_t;
  37   38  
  38   39  #define DIS_DEFAULT             0x0
  39   40  
  40   41  /* SPARC disassembler flags */
  41      -#define DIS_SPARC_V8            0x01
  42      -#define DIS_SPARC_V9            0x02
  43      -#define DIS_SPARC_V9_SGI        0x04
  44      -#define DIS_SPARC_V9_OPL        0x08
  45      -
  46      -/* x86 diassembler flags (mutually exclusive) */
  47      -#define DIS_X86_SIZE16          0x08
  48      -#define DIS_X86_SIZE32          0x10
  49      -#define DIS_X86_SIZE64          0x20
       42 +#define DIS_SPARC_V8            0x001
       43 +#define DIS_SPARC_V9            0x002
       44 +#define DIS_SPARC_V9_SGI        0x004
       45 +#define DIS_SPARC_V9_OPL        0x008
       46 +
       47 +/* x86 diassembler flags */
       48 +#define DIS_X86_SIZE16          0x100
       49 +#define DIS_X86_SIZE32          0x010
       50 +#define DIS_X86_SIZE64          0x020
  50   51  
  51   52  /* generic disassembler flags */
  52      -#define DIS_OCTAL               0x40
  53      -#define DIS_NOIMMSYM            0x80
       53 +#define DIS_OCTAL               0x040
       54 +#define DIS_NOIMMSYM            0x080
       55 +
       56 +#define DIS_ARCH_MASK           (DIS_SPARC_V8 | \
       57 +                DIS_SPARC_V9 | DIS_SPARC_V9_SGI | DIS_SPARC_V9_OPL | \
       58 +                DIS_X86_SIZE16 | DIS_X86_SIZE32 | DIS_X86_SIZE64)
  54   59  
  55   60  typedef int (*dis_lookup_f)(void *, uint64_t, char *, size_t, uint64_t *,
  56   61      size_t *);
  57   62  typedef int (*dis_read_f)(void *, uint64_t, void *, size_t);
  58   63  
  59   64  extern dis_handle_t *dis_handle_create(int, void *, dis_lookup_f, dis_read_f);
  60   65  extern void dis_handle_destroy(dis_handle_t *);
  61   66  
  62   67  extern int dis_disassemble(dis_handle_t *, uint64_t, char *, size_t);
  63   68  extern uint64_t dis_previnstr(dis_handle_t *, uint64_t, int n);
  64   69  extern void dis_set_data(dis_handle_t *, void *);
  65   70  extern void dis_flags_set(dis_handle_t *, int f);
  66   71  extern void dis_flags_clear(dis_handle_t *, int f);
  67   72  extern int dis_max_instrlen(dis_handle_t *);
       73 +extern int dis_min_instrlen(dis_handle_t *);
  68   74  extern int dis_instrlen(dis_handle_t *, uint64_t);
  69   75  
  70   76  /* libdisasm errors */
  71   77  #define E_DIS_NOMEM             1       /* Out of memory */
  72   78  #define E_DIS_INVALFLAG         2       /* Invalid flag for this architecture */
       79 +#define E_DIS_UNSUPARCH         3       /* Unsupported architecture */
  73   80  
  74   81  extern int dis_errno(void);
  75   82  extern const char *dis_strerror(int);
  76   83  
  77   84  #ifdef  __cplusplus
  78   85  }
  79   86  #endif
  80   87  
  81   88  #endif  /* _LIBDISASM_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX