Changes in / [f27ada7:25e963a] in mainline


Ignore:
Files:
2 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • HelenOS.config

    rf27ada7 r25e963a  
    505505! [CONFIG_START_BD=y] CONFIG_MOUNT_DATA (n/y)
    506506
    507 % Write core files
    508 ! CONFIG_WRITE_CORE_FILES (n/y)
     507% Verbose task dumps
     508! CONFIG_VERBOSE_DUMPS (n/y)
  • uspace/app/taskdump/Makefile

    rf27ada7 r25e963a  
    3434
    3535SOURCES = \
    36         elf_core.c \
    3736        taskdump.c \
    3837        symtab.c
  • uspace/app/taskdump/include/elf.h

    rf27ada7 r25e963a  
    148148#define SHF_MASKPROC            0xf0000000
    149149
    150 /** Macros for decomposing elf_symbol.st_info into binging and type */
    151 #define ELF_ST_BIND(i)          ((i) >> 4)
    152 #define ELF_ST_TYPE(i)          ((i) & 0x0f)
    153 #define ELF_ST_INFO(b, t)       (((b) << 4) + ((t) & 0x0f))
    154 
    155150/**
    156151 * Symbol binding
  • uspace/app/taskdump/symtab.c

    rf27ada7 r25e963a  
    206206        size_t i;
    207207        char *sname;
    208         unsigned stype;
    209208
    210209        for (i = 0; i < st->sym_size / sizeof(elf_symbol_t); ++i) {
    211210                if (st->sym[i].st_name == 0)
    212                         continue;
    213 
    214                 stype = ELF_ST_TYPE(st->sym[i].st_info);
    215                 if (stype != STT_OBJECT && stype != STT_FUNC)
    216211                        continue;
    217212
     
    245240        uintptr_t saddr, best_addr;
    246241        char *sname, *best_name;
    247         unsigned stype;
    248242
    249243        best_name = NULL;
     
    252246        for (i = 0; i < st->sym_size / sizeof(elf_symbol_t); ++i) {
    253247                if (st->sym[i].st_name == 0)
    254                         continue;
    255 
    256                 stype = ELF_ST_TYPE(st->sym[i].st_info);
    257                 if (stype != STT_OBJECT && stype != STT_FUNC)
    258248                        continue;
    259249
  • uspace/app/taskdump/taskdump.c

    rf27ada7 r25e963a  
    4040#include <udebug.h>
    4141#include <task.h>
    42 #include <as.h>
     42#include <kernel/mm/as.h>
    4343#include <sys/types.h>
    4444#include <sys/typefmt.h>
     
    4949
    5050#include <symtab.h>
    51 #include <elf_core.h>
    5251#include <stacktrace.h>
    5352
     
    5958static int phoneid;
    6059static task_id_t task_id;
    61 static bool write_core_file;
    62 static char *core_file_name;
     60static bool dump_memory;
    6361static char *app_name;
    6462static symtab_t *app_symtab;
     
    8280        int rc;
    8381
     82        /*
     83         * FIXME: The stdio module cannot currently detect whether we are
     84         * writing to a console or file. This workaround make file output
     85         * faster.
     86         */
     87        setvbuf(stdout, NULL, _IOFBF, 32768);
     88
    8489        printf("Task Dump Utility\n");
    85         write_core_file = false;
     90        dump_memory = false;
    8691
    8792        if (parse_args(argc, argv) < 0)
     
    167172                                        return -1;
    168173                                }
    169                         } else if (arg[1] == 'c' && arg[2] == '\0') {
    170                                 write_core_file = true;
    171 
    172                                 --argc; ++argv;
    173                                 core_file_name = *argv;
     174                        } else if (arg[1] == 'm' && arg[2] == '\0') {
     175                                dump_memory = true;
    174176                        } else {
    175177                                printf("Uknown option '%s'\n", arg[0]);
     
    201203static void print_syntax(void)
    202204{
    203         printf("Syntax: taskdump [-c <core_file>] -t <task_id>\n");
    204         printf("\t-c <core_file_id>\tName of core file to write.\n");
     205        printf("Syntax: taskdump [-m] -t <task_id>\n");
     206        printf("\t-m\tDump memory area contents.\n");
    205207        printf("\t-t <task_id>\tWhich task to dump.\n");
    206208}
     
    295297                    (ainfo_buf[i].flags & AS_AREA_CACHEABLE) ? 'C' : '-',
    296298                    ainfo_buf[i].start_addr, ainfo_buf[i].size);
     299
     300                if (dump_memory) {
     301                        putchar('\n');
     302                        area_dump(&ainfo_buf[i]);
     303                        putchar('\n');
     304                }
    297305        }
    298306
    299307        putchar('\n');
    300 
    301         if (write_core_file) {
    302                 printf("Writing core file '%s'\n", core_file_name);
    303                 rc = elf_core_save(core_file_name, ainfo_buf, n_areas, phoneid);
    304                 if (rc != EOK) {
    305                         printf("Failed writing core file.\n");
    306                         return EIO;
    307                 }
    308         }
    309308
    310309        free(ainfo_buf);
  • uspace/srv/taskmon/taskmon.c

    rf27ada7 r25e963a  
    4949static void fault_event(ipc_callid_t callid, ipc_call_t *call)
    5050{
    51         char *argv[6];
     51        char *argv[11];
    5252        char *fname;
    5353        char *dump_fname;
     
    6666        }
    6767
    68         if (asprintf(&dump_fname, "/data/core" PRIuTASKID, taskid) < 0) {
     68        if (asprintf(&dump_fname, "/scratch/d" PRIuTASKID ".txt", taskid) < 0) {
    6969                printf("Memory allocation failed.\n");
    7070                return;
     
    7373        printf(NAME ": Task %" PRIuTASKID " fault in thread %p.\n", taskid, thread);
    7474
    75 #ifdef CONFIG_WRITE_CORE_FILES
    76         argv[0] = "/app/taskdump";
    77         argv[1] = "-c";
    78         argv[2] = dump_fname;
    79         argv[3] = "-t";
    80         argv[4] = s_taskid;
    81         argv[5] = NULL;
     75#ifdef CONFIG_VERBOSE_DUMPS
     76        argv[0] = "/app/redir";
     77        argv[1] = "-i";
     78        argv[2] = "/readme";
     79        argv[3] = "-o";
     80        argv[4] = dump_fname;
     81        argv[5] = "--";
     82        argv[6] = "/app/taskdump";
     83        argv[7] = "-m";
     84        argv[8] = "-t";
     85        argv[9] = s_taskid;
     86        argv[10] = NULL;
    8287#else
    8388        argv[0] = "/app/taskdump";
Note: See TracChangeset for help on using the changeset viewer.