summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdisasm
diff options
context:
space:
mode:
authordmick <none@none>2007-03-23 19:23:04 -0700
committerdmick <none@none>2007-03-23 19:23:04 -0700
commite007031558dddc1a7f3593d9457d99bde738653e (patch)
tree352e144c7e4fcb1b53468827dcfd950977cc0027 /usr/src/lib/libdisasm
parentaf48bdb315becc10c7a7725af8416f9112363057 (diff)
downloadillumos-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.h5
-rw-r--r--usr/src/lib/libdisasm/common/mapfile-vers4
-rw-r--r--usr/src/lib/libdisasm/i386/dis_i386.c23
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)