diff options
author | dmick <none@none> | 2007-03-23 19:23:04 -0700 |
---|---|---|
committer | dmick <none@none> | 2007-03-23 19:23:04 -0700 |
commit | e007031558dddc1a7f3593d9457d99bde738653e (patch) | |
tree | 352e144c7e4fcb1b53468827dcfd950977cc0027 /usr/src/lib/libdisasm | |
parent | af48bdb315becc10c7a7725af8416f9112363057 (diff) | |
download | illumos-gate-e007031558dddc1a7f3593d9457d99bde738653e.tar.gz |
6448268 dis: 6427698 introduced a bunch of meaningless spew when disassembling .o files
Diffstat (limited to 'usr/src/lib/libdisasm')
-rw-r--r-- | usr/src/lib/libdisasm/common/libdisasm.h | 5 | ||||
-rw-r--r-- | usr/src/lib/libdisasm/common/mapfile-vers | 4 | ||||
-rw-r--r-- | usr/src/lib/libdisasm/i386/dis_i386.c | 23 |
3 files changed, 28 insertions, 4 deletions
diff --git a/usr/src/lib/libdisasm/common/libdisasm.h b/usr/src/lib/libdisasm/common/libdisasm.h index f66150a4ec..3ecdea0860 100644 --- a/usr/src/lib/libdisasm/common/libdisasm.h +++ b/usr/src/lib/libdisasm/common/libdisasm.h @@ -20,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -51,6 +51,7 @@ typedef struct dis_handle dis_handle_t; /* generic disassembler flags */ #define DIS_OCTAL 0x40 +#define DIS_NOIMMSYM 0x80 typedef int (*dis_lookup_f)(void *, uint64_t, char *, size_t, uint64_t *, size_t *); @@ -62,6 +63,8 @@ extern void dis_handle_destroy(dis_handle_t *); extern int dis_disassemble(dis_handle_t *, uint64_t, char *, size_t); extern uint64_t dis_previnstr(dis_handle_t *, uint64_t, int n); extern void dis_set_data(dis_handle_t *, void *); +extern void dis_flags_set(dis_handle_t *, int f); +extern void dis_flags_clear(dis_handle_t *, int f); extern int dis_max_instrlen(dis_handle_t *); /* libdisasm errors */ diff --git a/usr/src/lib/libdisasm/common/mapfile-vers b/usr/src/lib/libdisasm/common/mapfile-vers index aba1c6a51e..221caae54d 100644 --- a/usr/src/lib/libdisasm/common/mapfile-vers +++ b/usr/src/lib/libdisasm/common/mapfile-vers @@ -19,7 +19,7 @@ # CDDL HEADER END # # -# Copyright 2006 Sun Microsystems, Inc. All rights reserved. +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # # ident "%Z%%M% %I% %E% SMI" @@ -34,6 +34,8 @@ SUNWprivate_1.1 { dis_max_instrlen; dis_previnstr; dis_set_data; + dis_flags_set; + dis_flags_clear; dis_strerror; local: *; diff --git a/usr/src/lib/libdisasm/i386/dis_i386.c b/usr/src/lib/libdisasm/i386/dis_i386.c index e775a0b78d..a940d69f75 100644 --- a/usr/src/lib/libdisasm/i386/dis_i386.c +++ b/usr/src/lib/libdisasm/i386/dis_i386.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -99,7 +99,7 @@ dis_handle_create(int flags, void *data, dis_lookup_f lookup_func, * Validate architecture flags */ if (flags & ~(DIS_X86_SIZE16 | DIS_X86_SIZE32 | DIS_X86_SIZE64 | - DIS_OCTAL)) { + DIS_OCTAL | DIS_NOIMMSYM)) { (void) dis_seterrno(E_DIS_INVALFLAG); return (NULL); } @@ -145,6 +145,12 @@ dis_disassemble(dis_handle_t *dhp, uint64_t addr, char *buf, size_t buflen) { dhp->dh_addr = addr; + /* DIS_NOIMMSYM might not be set until now, so update */ + if (dhp->dh_flags & DIS_NOIMMSYM) + dhp->dh_dis.d86_flags |= DIS_F_NOIMMSYM; + else + dhp->dh_dis.d86_flags &= ~DIS_F_NOIMMSYM; + if (dtrace_disx86(&dhp->dh_dis, dhp->dh_mode) != 0) return (-1); @@ -167,6 +173,19 @@ dis_set_data(dis_handle_t *dhp, void *data) dhp->dh_data = data; } +void +dis_flags_set(dis_handle_t *dhp, int f) +{ + dhp->dh_flags |= f; +} + +void +dis_flags_clear(dis_handle_t *dhp, int f) +{ + dhp->dh_flags &= ~f; +} + + /* ARGSUSED */ int dis_max_instrlen(dis_handle_t *dhp) |