You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
108
tools/sgen/sgen-grep-binprot-main.c
Normal file
108
tools/sgen/sgen-grep-binprot-main.c
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* sgen-grep-binprot-main.c: Binary protocol entries reader
|
||||
*
|
||||
* Copyright (C) 2016 Xamarin Inc
|
||||
*
|
||||
* Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h>
|
||||
#include <glib.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include "sgen-entry-stream.h"
|
||||
#include "sgen-grep-binprot.h"
|
||||
|
||||
/* FIXME Add grepers for specific endianness */
|
||||
GrepEntriesFunction grepers [] = {
|
||||
sgen_binary_protocol_grep_entries32p, /* We have header, structures are packed, 32 bit word */
|
||||
sgen_binary_protocol_grep_entries64p, /* We have header, structures are packed, 64 bit word */
|
||||
sgen_binary_protocol_grep_entries /* No header, uses default word size and structure layout */
|
||||
};
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
int num_args = argc - 1;
|
||||
int num_nums = 0;
|
||||
int num_vtables = 0;
|
||||
int i;
|
||||
long nums [num_args];
|
||||
long vtables [num_args];
|
||||
gboolean dump_all = FALSE;
|
||||
gboolean color_output = FALSE;
|
||||
gboolean pause_times = FALSE;
|
||||
const char *input_path = NULL;
|
||||
int input_file;
|
||||
EntryStream stream;
|
||||
unsigned long long first_entry_to_consider = 0;
|
||||
|
||||
for (i = 0; i < num_args; ++i) {
|
||||
char *arg = argv [i + 1];
|
||||
char *next_arg = argv [i + 2];
|
||||
if (!strcmp (arg, "--all")) {
|
||||
dump_all = TRUE;
|
||||
} else if (!strcmp (arg, "--pause-times")) {
|
||||
pause_times = TRUE;
|
||||
} else if (!strcmp (arg, "-v") || !strcmp (arg, "--vtable")) {
|
||||
vtables [num_vtables++] = strtoul (next_arg, NULL, 16);
|
||||
++i;
|
||||
} else if (!strcmp (arg, "-s") || !strcmp (arg, "--start-at")) {
|
||||
first_entry_to_consider = strtoull (next_arg, NULL, 10);
|
||||
++i;
|
||||
} else if (!strcmp (arg, "-c") || !strcmp (arg, "--color")) {
|
||||
color_output = TRUE;
|
||||
} else if (!strcmp (arg, "-i") || !strcmp (arg, "--input")) {
|
||||
input_path = next_arg;
|
||||
++i;
|
||||
} else if (!strcmp (arg, "--help")) {
|
||||
printf (
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
"\n"
|
||||
"\tsgen-grep-binprot [options] [pointer...]\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"\n"
|
||||
"\tsgen-grep-binprot --all </tmp/binprot\n"
|
||||
"\tsgen-grep-binprot --input /tmp/binprot --color 0xdeadbeef\n"
|
||||
"\n"
|
||||
"Options:\n"
|
||||
"\n"
|
||||
"\t--all Print all entries.\n"
|
||||
"\t--color, -c Highlight matches in color.\n"
|
||||
"\t--help You're looking at it.\n"
|
||||
"\t--input FILE, -i FILE Read input from FILE instead of standard input.\n"
|
||||
"\t--pause-times Print GC pause times.\n"
|
||||
"\t--start-at N, -s N Begin filtering at the Nth entry.\n"
|
||||
"\t--vtable PTR, -v PTR Search for vtable pointer PTR.\n"
|
||||
"\n");
|
||||
return 0;
|
||||
} else {
|
||||
nums [num_nums++] = strtoul (arg, NULL, 16);
|
||||
}
|
||||
}
|
||||
|
||||
if (dump_all)
|
||||
assert (!pause_times);
|
||||
if (pause_times)
|
||||
assert (!dump_all);
|
||||
|
||||
input_file = input_path ? open (input_path, O_RDONLY) : STDIN_FILENO;
|
||||
init_stream (&stream, input_file);
|
||||
for (i = 0; i < sizeof (grepers) / sizeof (GrepEntriesFunction); i++) {
|
||||
if (grepers [i] (&stream, num_nums, nums, num_vtables, vtables, dump_all,
|
||||
pause_times, color_output, first_entry_to_consider)) {
|
||||
/* Success */
|
||||
break;
|
||||
}
|
||||
reset_stream (&stream);
|
||||
}
|
||||
close_stream (&stream);
|
||||
if (input_path)
|
||||
close (input_file);
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user