mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-01-18 06:51:47 +00:00
allow sorting defs by address
This commit is contained in:
parent
19980964d7
commit
2a127dd702
3 changed files with 34 additions and 3 deletions
|
@ -5,4 +5,7 @@ struct progs_s;
|
||||||
|
|
||||||
struct dfunction_s *func_find (int st_num);
|
struct dfunction_s *func_find (int st_num);
|
||||||
|
|
||||||
|
extern int sorted;
|
||||||
|
extern int verbosity;
|
||||||
|
|
||||||
#endif//__qfprogs_h
|
#endif//__qfprogs_h
|
||||||
|
|
|
@ -35,6 +35,12 @@ static __attribute__ ((unused)) const char rcsid[] =
|
||||||
"$Id$";
|
"$Id$";
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#ifdef HAVE_STRING_H
|
||||||
|
# include <string.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STRINGS_H
|
||||||
|
# include <strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "QF/progs.h"
|
#include "QF/progs.h"
|
||||||
#include "QF/va.h"
|
#include "QF/va.h"
|
||||||
|
@ -42,6 +48,15 @@ static __attribute__ ((unused)) const char rcsid[] =
|
||||||
#include "qfprogs.h"
|
#include "qfprogs.h"
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
cmp (const void *_a, const void *_b)
|
||||||
|
{
|
||||||
|
const ddef_t *a = (const ddef_t *)_a;
|
||||||
|
const ddef_t *b = (const ddef_t *)_b;
|
||||||
|
|
||||||
|
return a->ofs - b->ofs;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
dump_globals (progs_t *pr)
|
dump_globals (progs_t *pr)
|
||||||
{
|
{
|
||||||
|
@ -51,9 +66,16 @@ dump_globals (progs_t *pr)
|
||||||
int saveglobal;
|
int saveglobal;
|
||||||
int offset;
|
int offset;
|
||||||
const char *comment;
|
const char *comment;
|
||||||
|
ddef_t *global_defs = pr->pr_globaldefs;
|
||||||
|
|
||||||
|
if (sorted) {
|
||||||
|
global_defs = malloc (pr->progs->numglobaldefs * sizeof (ddef_t));
|
||||||
|
memcpy (global_defs, pr->pr_globaldefs,
|
||||||
|
pr->progs->numglobaldefs * sizeof (ddef_t));
|
||||||
|
qsort (global_defs, pr->progs->numglobaldefs, sizeof (ddef_t), cmp);
|
||||||
|
}
|
||||||
for (i = 0; i < pr->progs->numglobaldefs; i++) {
|
for (i = 0; i < pr->progs->numglobaldefs; i++) {
|
||||||
ddef_t *def = &pr->pr_globaldefs[i];
|
ddef_t *def = &global_defs[i];
|
||||||
|
|
||||||
if (!def->type && !def->ofs && !def->s_name)
|
if (!def->type && !def->ofs && !def->s_name)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -66,6 +66,9 @@ static __attribute__ ((unused)) const char rcsid[] =
|
||||||
#include "qfprogs.h"
|
#include "qfprogs.h"
|
||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
|
|
||||||
|
int sorted = 0;
|
||||||
|
int verbosity = 0;
|
||||||
|
|
||||||
static const struct option long_options[] = {
|
static const struct option long_options[] = {
|
||||||
{"disassemble", no_argument, 0, 'd'},
|
{"disassemble", no_argument, 0, 'd'},
|
||||||
{"globals", no_argument, 0, 'g'},
|
{"globals", no_argument, 0, 'g'},
|
||||||
|
@ -76,6 +79,7 @@ static const struct option long_options[] = {
|
||||||
{"modules", no_argument, 0, 'M'},
|
{"modules", no_argument, 0, 'M'},
|
||||||
{"path", required_argument, 0, 'P'},
|
{"path", required_argument, 0, 'P'},
|
||||||
{"verbose", no_argument, 0, 'v'},
|
{"verbose", no_argument, 0, 'v'},
|
||||||
|
{"numeric", no_argument, 0, 'n'},
|
||||||
{NULL, 0, NULL, 0},
|
{NULL, 0, NULL, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -86,7 +90,6 @@ static progs_t pr;
|
||||||
static void *membase;
|
static void *membase;
|
||||||
static int memsize = 1024*1024;
|
static int memsize = 1024*1024;
|
||||||
|
|
||||||
static int verbosity = 0;
|
|
||||||
static const char *source_path = "";
|
static const char *source_path = "";
|
||||||
|
|
||||||
static hashtab_t *func_tab;
|
static hashtab_t *func_tab;
|
||||||
|
@ -225,7 +228,7 @@ main (int argc, char **argv)
|
||||||
void (*func)(progs_t *pr) = dump_globals;
|
void (*func)(progs_t *pr) = dump_globals;
|
||||||
|
|
||||||
while ((c = getopt_long (argc, argv,
|
while ((c = getopt_long (argc, argv,
|
||||||
"dgsfFlMP:v", long_options, 0)) != EOF) {
|
"dgsfFlMP:vn", long_options, 0)) != EOF) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'd':
|
case 'd':
|
||||||
func = disassemble_progs;
|
func = disassemble_progs;
|
||||||
|
@ -254,6 +257,9 @@ main (int argc, char **argv)
|
||||||
case 'v':
|
case 'v':
|
||||||
verbosity++;
|
verbosity++;
|
||||||
break;
|
break;
|
||||||
|
case 'n':
|
||||||
|
sorted = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue