diff options
Diffstat (limited to 'kernel/debug/kdb/kdb_io.c')
-rw-r--r-- | kernel/debug/kdb/kdb_io.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c index ed5d34925ad0..6a4b41484afe 100644 --- a/kernel/debug/kdb/kdb_io.c +++ b/kernel/debug/kdb/kdb_io.c | |||
@@ -216,7 +216,7 @@ static char *kdb_read(char *buffer, size_t bufsize) | |||
216 | int count; | 216 | int count; |
217 | int i; | 217 | int i; |
218 | int diag, dtab_count; | 218 | int diag, dtab_count; |
219 | int key; | 219 | int key, buf_size, ret; |
220 | 220 | ||
221 | 221 | ||
222 | diag = kdbgetintenv("DTABCOUNT", &dtab_count); | 222 | diag = kdbgetintenv("DTABCOUNT", &dtab_count); |
@@ -336,9 +336,8 @@ poll_again: | |||
336 | else | 336 | else |
337 | p_tmp = tmpbuffer; | 337 | p_tmp = tmpbuffer; |
338 | len = strlen(p_tmp); | 338 | len = strlen(p_tmp); |
339 | count = kallsyms_symbol_complete(p_tmp, | 339 | buf_size = sizeof(tmpbuffer) - (p_tmp - tmpbuffer); |
340 | sizeof(tmpbuffer) - | 340 | count = kallsyms_symbol_complete(p_tmp, buf_size); |
341 | (p_tmp - tmpbuffer)); | ||
342 | if (tab == 2 && count > 0) { | 341 | if (tab == 2 && count > 0) { |
343 | kdb_printf("\n%d symbols are found.", count); | 342 | kdb_printf("\n%d symbols are found.", count); |
344 | if (count > dtab_count) { | 343 | if (count > dtab_count) { |
@@ -350,9 +349,13 @@ poll_again: | |||
350 | } | 349 | } |
351 | kdb_printf("\n"); | 350 | kdb_printf("\n"); |
352 | for (i = 0; i < count; i++) { | 351 | for (i = 0; i < count; i++) { |
353 | if (WARN_ON(!kallsyms_symbol_next(p_tmp, i))) | 352 | ret = kallsyms_symbol_next(p_tmp, i, buf_size); |
353 | if (WARN_ON(!ret)) | ||
354 | break; | 354 | break; |
355 | kdb_printf("%s ", p_tmp); | 355 | if (ret != -E2BIG) |
356 | kdb_printf("%s ", p_tmp); | ||
357 | else | ||
358 | kdb_printf("%s... ", p_tmp); | ||
356 | *(p_tmp + len) = '\0'; | 359 | *(p_tmp + len) = '\0'; |
357 | } | 360 | } |
358 | if (i >= dtab_count) | 361 | if (i >= dtab_count) |