Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8576aa05 authored by Elliott Hughes's avatar Elliott Hughes Committed by Android Git Automerger
Browse files

am 9cce837d: Merge "Increase output width for wchan and pc on 64 bit targets."

* commit '9cce837d':
  Increase output width for wchan and pc on 64 bit targets.
parents 4c37448f 9cce837d
Loading
Loading
Loading
Loading
+22 −5
Original line number Diff line number Diff line
@@ -29,6 +29,12 @@ static char *nexttok(char **strp)
#define SHOW_NUMERIC_UID 32
#define SHOW_ABI 64

#if __LP64__
#define PC_WIDTH 10 /* Realistically, the top bits will be 0, so don't waste space. */
#else
#define PC_WIDTH (2*sizeof(uintptr_t))
#endif

static int display_flags = 0;
static int ppid_filter = 0;

@@ -44,7 +50,8 @@ static int ps_line(int pid, int tid, char *namefilter)
    int fd, r;
    char *ptr, *name, *state;
    int ppid;
    unsigned wchan, rss, vss, eip;
    unsigned rss, vss;
    uintptr_t eip;
    unsigned utime, stime;
    int prio, nice, rtprio, sched, psr;
    struct passwd *pw;
@@ -124,7 +131,7 @@ static int ps_line(int pid, int tid, char *namefilter)
    nexttok(&ptr); // blocked
    nexttok(&ptr); // sigignore
    nexttok(&ptr); // sigcatch
    wchan = strtoul(nexttok(&ptr), 0, 10); // wchan
    nexttok(&ptr); // wchan
    nexttok(&ptr); // nswap
    nexttok(&ptr); // cnswap
    nexttok(&ptr); // exit signal
@@ -176,7 +183,16 @@ static int ps_line(int pid, int tid, char *namefilter)
            else
                printf(" %.2s ", get_sched_policy_name(p));
        }
        printf(" %08x %08x %s ", wchan, eip, state);
        char path[PATH_MAX];
        snprintf(path, sizeof(path), "/proc/%d/wchan", pid);
        char wchan[10];
        int fd = open(path, O_RDONLY);
        ssize_t wchan_len = read(fd, wchan, sizeof(wchan));
        if (wchan_len == -1) {
            wchan[wchan_len = 0] = '\0';
        }
        close(fd);
        printf(" %10.*s %0*lx %s ", (int) wchan_len, wchan, (int) PC_WIDTH, eip, state);
        if (display_flags & SHOW_ABI) {
            print_exe_abi(pid);
        }
@@ -287,10 +303,11 @@ int ps_main(int argc, char **argv)
    if (display_flags & SHOW_MACLABEL) {
        printf("LABEL                          USER      PID   PPID  NAME\n");
    } else {
        printf("USER     PID   PPID  VSIZE  RSS   %s%s %s WCHAN    PC        %sNAME\n",
        printf("USER      PID   PPID  VSIZE  RSS  %s%s %sWCHAN      %*s  %sNAME\n",
               (display_flags&SHOW_CPU)?"CPU ":"",
               (display_flags&SHOW_PRIO)?"PRIO  NICE  RTPRI SCHED ":"",
               (display_flags&SHOW_POLICY)?"PCY " : "",
               (int) PC_WIDTH, "PC",
               (display_flags&SHOW_ABI)?"ABI " : "");
    }
    while((de = readdir(d)) != 0){