87 lines
1.9 KiB
C
87 lines
1.9 KiB
C
|
#ifndef COSMOPOLITAN_TOOL_BUILD_LIB_DIS_H_
|
||
|
#define COSMOPOLITAN_TOOL_BUILD_LIB_DIS_H_
|
||
|
#include "third_party/xed/x86.h"
|
||
|
#include "tool/build/lib/loader.h"
|
||
|
#include "tool/build/lib/machine.h"
|
||
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||
|
COSMOPOLITAN_C_START_
|
||
|
|
||
|
struct Dis {
|
||
|
struct DisOps {
|
||
|
size_t i, n;
|
||
|
struct DisOp {
|
||
|
int64_t addr;
|
||
|
int unique;
|
||
|
int size;
|
||
|
bool active;
|
||
|
char *s;
|
||
|
} * p;
|
||
|
} ops;
|
||
|
struct DisLoads {
|
||
|
size_t i, n;
|
||
|
struct DisLoad {
|
||
|
int64_t addr;
|
||
|
uint64_t size;
|
||
|
bool istext;
|
||
|
} * p;
|
||
|
} loads;
|
||
|
struct DisSyms {
|
||
|
size_t i, n;
|
||
|
struct DisSym {
|
||
|
int64_t addr;
|
||
|
int rank;
|
||
|
int unique;
|
||
|
int size;
|
||
|
int name;
|
||
|
bool iscode;
|
||
|
bool isabs;
|
||
|
} * p;
|
||
|
const char *stab;
|
||
|
} syms;
|
||
|
struct DisEdges {
|
||
|
size_t i, n;
|
||
|
struct DisEdge {
|
||
|
int64_t src;
|
||
|
int64_t dst;
|
||
|
} * p;
|
||
|
} edges;
|
||
|
struct XedDecodedInst xedd[1];
|
||
|
uint8_t raw[512];
|
||
|
char buf[512];
|
||
|
};
|
||
|
|
||
|
struct DisBuilder {
|
||
|
struct Dis *dis;
|
||
|
struct XedDecodedInst *xedd;
|
||
|
int64_t addr;
|
||
|
};
|
||
|
|
||
|
struct DisHigh {
|
||
|
uint8_t keyword;
|
||
|
uint8_t reg;
|
||
|
uint8_t literal;
|
||
|
uint8_t label;
|
||
|
uint8_t comment;
|
||
|
};
|
||
|
|
||
|
extern struct DisHigh *g_dis_high;
|
||
|
|
||
|
long DisFind(struct Dis *, int64_t);
|
||
|
void Dis(struct Dis *, struct Machine *, int64_t);
|
||
|
void DisFree(struct Dis *);
|
||
|
void DisFreeOp(struct DisOp *);
|
||
|
void DisFreeOps(struct DisOps *);
|
||
|
void DisLoadElf(struct Dis *, struct Elf *);
|
||
|
long DisFindSym(struct Dis *, int64_t);
|
||
|
long DisFindSymByName(struct Dis *, const char *);
|
||
|
bool DisIsText(struct Dis *, int64_t);
|
||
|
bool DisIsProg(struct Dis *, int64_t);
|
||
|
const char *DisSpec(struct XedDecodedInst *, char *);
|
||
|
char *DisInst(struct DisBuilder, char *, const char *);
|
||
|
char *DisArg(struct DisBuilder, char *, const char *);
|
||
|
char *DisHigh(char *, int);
|
||
|
|
||
|
COSMOPOLITAN_C_END_
|
||
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||
|
#endif /* COSMOPOLITAN_TOOL_BUILD_LIB_DIS_H_ */
|