diff options
Diffstat (limited to 'tools/lib/traceevent')
-rw-r--r-- | tools/lib/traceevent/event-parse.c | 49 | ||||
-rw-r--r-- | tools/lib/traceevent/event-parse.h | 3 | ||||
-rw-r--r-- | tools/lib/traceevent/event-utils.h | 3 | ||||
-rw-r--r-- | tools/lib/traceevent/parse-filter.c | 3 | ||||
-rw-r--r-- | tools/lib/traceevent/parse-utils.c | 19 | ||||
-rw-r--r-- | tools/lib/traceevent/trace-seq.c | 3 |
6 files changed, 66 insertions, 14 deletions
diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c index 5a824e355d04..82b0606dcb8a 100644 --- a/tools/lib/traceevent/event-parse.c +++ b/tools/lib/traceevent/event-parse.c | |||
@@ -13,8 +13,7 @@ | |||
13 | * GNU Lesser General Public License for more details. | 13 | * GNU Lesser General Public License for more details. |
14 | * | 14 | * |
15 | * You should have received a copy of the GNU Lesser General Public | 15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this program; if not, write to the Free Software | 16 | * License along with this program; if not, see <http://www.gnu.org/licenses> |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | 17 | * |
19 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 18 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
20 | * | 19 | * |
@@ -1224,6 +1223,34 @@ static int field_is_long(struct format_field *field) | |||
1224 | return 0; | 1223 | return 0; |
1225 | } | 1224 | } |
1226 | 1225 | ||
1226 | static unsigned int type_size(const char *name) | ||
1227 | { | ||
1228 | /* This covers all FIELD_IS_STRING types. */ | ||
1229 | static struct { | ||
1230 | const char *type; | ||
1231 | unsigned int size; | ||
1232 | } table[] = { | ||
1233 | { "u8", 1 }, | ||
1234 | { "u16", 2 }, | ||
1235 | { "u32", 4 }, | ||
1236 | { "u64", 8 }, | ||
1237 | { "s8", 1 }, | ||
1238 | { "s16", 2 }, | ||
1239 | { "s32", 4 }, | ||
1240 | { "s64", 8 }, | ||
1241 | { "char", 1 }, | ||
1242 | { }, | ||
1243 | }; | ||
1244 | int i; | ||
1245 | |||
1246 | for (i = 0; table[i].type; i++) { | ||
1247 | if (!strcmp(table[i].type, name)) | ||
1248 | return table[i].size; | ||
1249 | } | ||
1250 | |||
1251 | return 0; | ||
1252 | } | ||
1253 | |||
1227 | static int event_read_fields(struct event_format *event, struct format_field **fields) | 1254 | static int event_read_fields(struct event_format *event, struct format_field **fields) |
1228 | { | 1255 | { |
1229 | struct format_field *field = NULL; | 1256 | struct format_field *field = NULL; |
@@ -1233,6 +1260,8 @@ static int event_read_fields(struct event_format *event, struct format_field **f | |||
1233 | int count = 0; | 1260 | int count = 0; |
1234 | 1261 | ||
1235 | do { | 1262 | do { |
1263 | unsigned int size_dynamic = 0; | ||
1264 | |||
1236 | type = read_token(&token); | 1265 | type = read_token(&token); |
1237 | if (type == EVENT_NEWLINE) { | 1266 | if (type == EVENT_NEWLINE) { |
1238 | free_token(token); | 1267 | free_token(token); |
@@ -1391,6 +1420,7 @@ static int event_read_fields(struct event_format *event, struct format_field **f | |||
1391 | field->type = new_type; | 1420 | field->type = new_type; |
1392 | strcat(field->type, " "); | 1421 | strcat(field->type, " "); |
1393 | strcat(field->type, field->name); | 1422 | strcat(field->type, field->name); |
1423 | size_dynamic = type_size(field->name); | ||
1394 | free_token(field->name); | 1424 | free_token(field->name); |
1395 | strcat(field->type, brackets); | 1425 | strcat(field->type, brackets); |
1396 | field->name = token; | 1426 | field->name = token; |
@@ -1463,7 +1493,8 @@ static int event_read_fields(struct event_format *event, struct format_field **f | |||
1463 | if (read_expect_type(EVENT_ITEM, &token)) | 1493 | if (read_expect_type(EVENT_ITEM, &token)) |
1464 | goto fail; | 1494 | goto fail; |
1465 | 1495 | ||
1466 | /* add signed type */ | 1496 | if (strtoul(token, NULL, 0)) |
1497 | field->flags |= FIELD_IS_SIGNED; | ||
1467 | 1498 | ||
1468 | free_token(token); | 1499 | free_token(token); |
1469 | if (read_expected(EVENT_OP, ";") < 0) | 1500 | if (read_expected(EVENT_OP, ";") < 0) |
@@ -1478,10 +1509,14 @@ static int event_read_fields(struct event_format *event, struct format_field **f | |||
1478 | if (field->flags & FIELD_IS_ARRAY) { | 1509 | if (field->flags & FIELD_IS_ARRAY) { |
1479 | if (field->arraylen) | 1510 | if (field->arraylen) |
1480 | field->elementsize = field->size / field->arraylen; | 1511 | field->elementsize = field->size / field->arraylen; |
1512 | else if (field->flags & FIELD_IS_DYNAMIC) | ||
1513 | field->elementsize = size_dynamic; | ||
1481 | else if (field->flags & FIELD_IS_STRING) | 1514 | else if (field->flags & FIELD_IS_STRING) |
1482 | field->elementsize = 1; | 1515 | field->elementsize = 1; |
1483 | else | 1516 | else if (field->flags & FIELD_IS_LONG) |
1484 | field->elementsize = event->pevent->long_size; | 1517 | field->elementsize = event->pevent ? |
1518 | event->pevent->long_size : | ||
1519 | sizeof(long); | ||
1485 | } else | 1520 | } else |
1486 | field->elementsize = field->size; | 1521 | field->elementsize = field->size; |
1487 | 1522 | ||
@@ -1785,6 +1820,8 @@ process_op(struct event_format *event, struct print_arg *arg, char **tok) | |||
1785 | strcmp(token, "/") == 0 || | 1820 | strcmp(token, "/") == 0 || |
1786 | strcmp(token, "<") == 0 || | 1821 | strcmp(token, "<") == 0 || |
1787 | strcmp(token, ">") == 0 || | 1822 | strcmp(token, ">") == 0 || |
1823 | strcmp(token, "<=") == 0 || | ||
1824 | strcmp(token, ">=") == 0 || | ||
1788 | strcmp(token, "==") == 0 || | 1825 | strcmp(token, "==") == 0 || |
1789 | strcmp(token, "!=") == 0) { | 1826 | strcmp(token, "!=") == 0) { |
1790 | 1827 | ||
@@ -2481,7 +2518,7 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char ** | |||
2481 | 2518 | ||
2482 | free_token(token); | 2519 | free_token(token); |
2483 | arg = alloc_arg(); | 2520 | arg = alloc_arg(); |
2484 | if (!field) { | 2521 | if (!arg) { |
2485 | do_warning("%s: not enough memory!", __func__); | 2522 | do_warning("%s: not enough memory!", __func__); |
2486 | *tok = NULL; | 2523 | *tok = NULL; |
2487 | return EVENT_ERROR; | 2524 | return EVENT_ERROR; |
diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h index 24a4bbabc5d5..7be7e89533e4 100644 --- a/tools/lib/traceevent/event-parse.h +++ b/tools/lib/traceevent/event-parse.h | |||
@@ -13,8 +13,7 @@ | |||
13 | * GNU Lesser General Public License for more details. | 13 | * GNU Lesser General Public License for more details. |
14 | * | 14 | * |
15 | * You should have received a copy of the GNU Lesser General Public | 15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this program; if not, write to the Free Software | 16 | * License along with this program; if not, see <http://www.gnu.org/licenses> |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | 17 | * |
19 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 18 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
20 | */ | 19 | */ |
diff --git a/tools/lib/traceevent/event-utils.h b/tools/lib/traceevent/event-utils.h index bc075006966e..e76c9acb92cd 100644 --- a/tools/lib/traceevent/event-utils.h +++ b/tools/lib/traceevent/event-utils.h | |||
@@ -13,8 +13,7 @@ | |||
13 | * GNU Lesser General Public License for more details. | 13 | * GNU Lesser General Public License for more details. |
14 | * | 14 | * |
15 | * You should have received a copy of the GNU Lesser General Public | 15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this program; if not, write to the Free Software | 16 | * License along with this program; if not, see <http://www.gnu.org/licenses> |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | 17 | * |
19 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 18 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
20 | */ | 19 | */ |
diff --git a/tools/lib/traceevent/parse-filter.c b/tools/lib/traceevent/parse-filter.c index 5ea4326ad11f..2500e75583fc 100644 --- a/tools/lib/traceevent/parse-filter.c +++ b/tools/lib/traceevent/parse-filter.c | |||
@@ -13,8 +13,7 @@ | |||
13 | * GNU Lesser General Public License for more details. | 13 | * GNU Lesser General Public License for more details. |
14 | * | 14 | * |
15 | * You should have received a copy of the GNU Lesser General Public | 15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this program; if not, write to the Free Software | 16 | * License along with this program; if not, see <http://www.gnu.org/licenses> |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | 17 | * |
19 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 18 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
20 | */ | 19 | */ |
diff --git a/tools/lib/traceevent/parse-utils.c b/tools/lib/traceevent/parse-utils.c index f023a133abb6..bba701cf10e6 100644 --- a/tools/lib/traceevent/parse-utils.c +++ b/tools/lib/traceevent/parse-utils.c | |||
@@ -1,3 +1,22 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2010 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> | ||
3 | * | ||
4 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
5 | * This program is free software; you can redistribute it and/or | ||
6 | * modify it under the terms of the GNU Lesser General Public | ||
7 | * License as published by the Free Software Foundation; | ||
8 | * version 2.1 of the License (not later!) | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU Lesser General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU Lesser General Public | ||
16 | * License along with this program; if not, see <http://www.gnu.org/licenses> | ||
17 | * | ||
18 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
19 | */ | ||
1 | #include <stdio.h> | 20 | #include <stdio.h> |
2 | #include <stdlib.h> | 21 | #include <stdlib.h> |
3 | #include <string.h> | 22 | #include <string.h> |
diff --git a/tools/lib/traceevent/trace-seq.c b/tools/lib/traceevent/trace-seq.c index b1ccc923e8a5..a57db805136a 100644 --- a/tools/lib/traceevent/trace-seq.c +++ b/tools/lib/traceevent/trace-seq.c | |||
@@ -13,8 +13,7 @@ | |||
13 | * GNU Lesser General Public License for more details. | 13 | * GNU Lesser General Public License for more details. |
14 | * | 14 | * |
15 | * You should have received a copy of the GNU Lesser General Public | 15 | * You should have received a copy of the GNU Lesser General Public |
16 | * License along with this program; if not, write to the Free Software | 16 | * License along with this program; if not, see <http://www.gnu.org/licenses> |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | * | 17 | * |
19 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 18 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
20 | */ | 19 | */ |