diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..375f1be --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/procps-ng-3.3.10.tar.xz diff --git a/.procps-ng.metadata b/.procps-ng.metadata new file mode 100644 index 0000000..ea35251 --- /dev/null +++ b/.procps-ng.metadata @@ -0,0 +1 @@ +484db198d6a18a42b4011d5ecb2cb784a81b0e4f SOURCES/procps-ng-3.3.10.tar.xz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/procps-ng-3.3.10-find_elf_note-memory-error-fix.patch b/SOURCES/procps-ng-3.3.10-find_elf_note-memory-error-fix.patch new file mode 100644 index 0000000..47b52d9 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-find_elf_note-memory-error-fix.patch @@ -0,0 +1,89 @@ +diff --git a/proc/sysinfo.c b/proc/sysinfo.c +index 1435de1..1d2b8e2 100644 +--- a/proc/sysinfo.c ++++ b/proc/sysinfo.c +@@ -36,6 +36,9 @@ + #include /* htons */ + #endif + ++#include ++#include ++ + long smp_num_cpus; /* number of CPUs */ + long page_bytes; /* this architecture's page size */ + +@@ -249,15 +252,67 @@ static void old_Hertz_hack(void){ + + extern char** environ; + +-/* for ELF executables, notes are pushed before environment and args */ +-static unsigned long find_elf_note(unsigned long findme){ ++static unsigned long find_elf_note(unsigned long type) ++{ ++ ElfW(auxv_t) auxv_struct; ++ ElfW(auxv_t) *auxv_temp; ++ FILE *fd; ++ int i; ++ static ElfW(auxv_t) *auxv = NULL; + unsigned long *ep = (unsigned long *)environ; +- while(*ep++); +- while(*ep){ +- if(ep[0]==findme) return ep[1]; +- ep+=2; ++ unsigned long ret_val = NOTE_NOT_FOUND; ++ ++ ++ if(!auxv) { ++ ++ fd = fopen("/proc/self/auxv", "rb"); ++ ++ if(!fd) { // can't open auxv? that could be caused by euid change ++ // ... and we need to fall back to the old and unsafe ++ // ... method that doesn't work when calling library ++ // ... functions with dlopen -> FIXME :( ++ ++ while(*ep++); // for ELF executables, notes are pushed ++ while(*ep){ // ... before environment and args ++ if(ep[0]==type) return ep[1]; ++ ep+=2; ++ } ++ return NOTE_NOT_FOUND; ++ } ++ ++ auxv = (ElfW(auxv_t) *) malloc(getpagesize()); ++ if (!auxv) { ++ perror("malloc"); ++ exit(EXIT_FAILURE); ++ } ++ ++ i = 0; ++ do { ++ fread(&auxv_struct, sizeof(ElfW(auxv_t)), 1, fd); ++ auxv[i] = auxv_struct; ++ i++; ++ } while (auxv_struct.a_type != AT_NULL); ++ ++ fclose(fd); ++ ++ } ++ ++ auxv_temp = auxv; ++ i = 0; ++ do { ++ if(auxv_temp[i].a_type == type) { ++ ret_val = (unsigned long)auxv_temp[i].a_un.a_val; ++ break; ++ } ++ i++; ++ } while (auxv_temp[i].a_type != AT_NULL); ++ ++ if (auxv){ ++ auxv_temp = NULL; ++ free(auxv); ++ auxv = NULL; + } +- return NOTE_NOT_FOUND; ++ return ret_val; + } + + int have_privs; diff --git a/SOURCES/procps-ng-3.3.10-free-uninitialized-errno.patch b/SOURCES/procps-ng-3.3.10-free-uninitialized-errno.patch new file mode 100644 index 0000000..3975e42 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-free-uninitialized-errno.patch @@ -0,0 +1,11 @@ +diff -Naur procps-ng-3.3.10.orig/free.c procps-ng-3.3.10/free.c +--- procps-ng-3.3.10.orig/free.c 2015-12-01 17:23:26.702968686 +0100 ++++ procps-ng-3.3.10/free.c 2015-12-01 17:22:34.590529390 +0100 +@@ -262,6 +262,7 @@ + break; + case 's': + flags |= FREE_REPEAT; ++ errno = 0; + args.repeat_interval = (1000000 * strtof(optarg, &endptr)); + if (errno || optarg == endptr || (endptr && *endptr)) + xerrx(EXIT_FAILURE, _("seconds argument `%s' failed"), optarg); diff --git a/SOURCES/procps-ng-3.3.10-pmap-lines-twice.patch b/SOURCES/procps-ng-3.3.10-pmap-lines-twice.patch new file mode 100644 index 0000000..edb2250 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-pmap-lines-twice.patch @@ -0,0 +1,12 @@ +diff -up procps-ng-3.3.10/pmap.c.ori procps-ng-3.3.10/pmap.c +--- procps-ng-3.3.10/pmap.c.ori 2017-02-20 10:47:08.292453148 +0100 ++++ procps-ng-3.3.10/pmap.c 2017-02-20 10:49:05.078924572 +0100 +@@ -615,7 +615,7 @@ static int one_proc(proc_t * p) + total_private_dirty += smap_value; + continue; + } +- if (strncmp("Swap", smap_key, 4) == 0) { ++ if ((strncmp("Swap", smap_key, 4) == 0) && (strlen(smap_key)==4)) { + /*doesn't matter as long as last */ + printf("%0*" KLF "x %*lu %*llu %*llu %*s %s\n", + maxw1, start, diff --git a/SOURCES/procps-ng-3.3.10-pmap-skip-vmflags.patch b/SOURCES/procps-ng-3.3.10-pmap-skip-vmflags.patch new file mode 100644 index 0000000..bc949a8 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-pmap-skip-vmflags.patch @@ -0,0 +1,15 @@ +diff -Naur procps-ng-3.3.10.orig/pmap.c procps-ng-3.3.10/pmap.c +--- procps-ng-3.3.10.orig/pmap.c 2014-09-23 13:40:36.000000000 +0200 ++++ procps-ng-3.3.10/pmap.c 2015-11-24 10:47:24.764107976 +0100 +@@ -629,9 +629,9 @@ + diff = 0; + continue; + } +- /* Other keys */ +- continue; + } ++ /* Anything else starting with A-Z? -> skip it (rhbz#1262864) */ ++ continue; + } + sscanf(mapbuf, "%" KLF "x-%" KLF "x %31s %llx %x:%x %llu", &start, + &end, perms, &file_offset, &dev_major, &dev_minor, diff --git a/SOURCES/procps-ng-3.3.10-ps-full-wchan-name.patch b/SOURCES/procps-ng-3.3.10-ps-full-wchan-name.patch new file mode 100644 index 0000000..e72d059 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-ps-full-wchan-name.patch @@ -0,0 +1,29 @@ +diff -up ./proc/ksym.c.ori ./proc/ksym.c +--- ./proc/ksym.c.ori 2006-06-25 08:57:18.000000000 +0200 ++++ ./proc/ksym.c 2016-11-16 13:34:31.902836748 +0100 +@@ -567,11 +567,7 @@ static const char * read_wchan_file(unsi + + // lame ppc64 has a '.' in front of every name + if(*ret=='.') ret++; +- switch(*ret){ +- case 's': if(!strncmp(ret, "sys_", 4)) ret += 4; break; +- case 'd': if(!strncmp(ret, "do_", 3)) ret += 3; break; +- case '_': while(*ret=='_') ret++; break; +- } ++ while(*ret=='_') ret++; + return ret; + } + +@@ -616,11 +612,7 @@ const char * lookup_wchan(unsigned KLONG + ret = good_symb->name; + // lame ppc64 has a '.' in front of every name + if(*ret=='.') ret++; +- switch(*ret){ +- case 's': if(!strncmp(ret, "sys_", 4)) ret += 4; break; +- case 'd': if(!strncmp(ret, "do_", 3)) ret += 3; break; +- case '_': while(*ret=='_') ret++; break; +- } ++ while(*ret=='_') ret++; + /* if(!*ret) ret = fail.name; */ /* not likely (name was "sys_", etc.) */ + + /* cache name after abbreviation */ diff --git a/SOURCES/procps-ng-3.3.10-ps-scattered-thread-cgroups.patch b/SOURCES/procps-ng-3.3.10-ps-scattered-thread-cgroups.patch new file mode 100644 index 0000000..03ec6d1 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-ps-scattered-thread-cgroups.patch @@ -0,0 +1,69 @@ +diff --git a/ps/output.c b/ps/output.c +index 501e29a..5f011b1 100644 +--- a/ps/output.c ++++ b/ps/output.c +@@ -1343,6 +1343,41 @@ + return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%4u]); + } + ++static int pr_thcgr(char *restrict const outbuf, const proc_t *restrict const pp){ ++ char filename[48]; ++ FILE *fd; ++ int counter = 0; ++ int c; ++ int is_cgroup = 0; ++ ++ outbuf[0]='\0'; ++ snprintf(filename, sizeof filename, "/proc/%d/task/%d/cgroup", pp->tgid, pp->tid); ++ fd = fopen(filename, "r"); ++ if (likely(fd == NULL)) goto fail; ++ while (( (c = fgetc(fd)) != EOF) && (counter<665)) { ++ if (is_cgroup == 0) { ++ if (c == ':') { ++ is_cgroup = 1; ++ if (counter>0) ++ outbuf[counter++]=';'; ++ } ++ }else ++ if ((c == '\n') || (c == '\0')) ++ is_cgroup = 0; ++ else ++ outbuf[counter++]=c; ++ } ++ outbuf[counter]='\0'; ++ fclose(fd); ++ if (counter>0) ++ return counter; ++fail: ++ outbuf[0] = '-'; ++ outbuf[1] = '\0'; ++ return 1; ++} ++ ++ + /***************************************************************************/ + /*************************** other stuff ***********************************/ + +@@ -1623,6 +1658,7 @@ + {"taskid", "TASKID", pr_nop, sr_nop, 5, 0, SUN, TO|PIDMAX|RIGHT}, // is this a thread ID? + {"tdev", "TDEV", pr_nop, sr_nop, 4, 0, XXX, AN|RIGHT}, + {"tgid", "TGID", pr_procs, sr_procs, 5, 0, LNX, PO|PIDMAX|RIGHT}, ++{"thcgr", "THCGR", pr_thcgr, sr_nop, 35, 0, LNX, PO|LEFT}, /* thread cgroups */ + {"thcount", "THCNT", pr_nlwp, sr_nlwp, 5, 0, AIX, PO|RIGHT}, + {"tid", "TID", pr_tasks, sr_tasks, 5, 0, AIX, TO|PIDMAX|RIGHT}, + {"time", "TIME", pr_time, sr_time, 8, 0, U98, ET|RIGHT}, /*cputime*/ /* was 6 wide */ +diff --git a/ps/ps.1 b/ps/ps.1 +index b90adc8..b8d6c81 100644 +--- a/ps/ps.1 ++++ b/ps/ps.1 +@@ -1713,6 +1713,10 @@ + It is the process ID of the thread group leader. + T} + ++thcgr THCGR T{ ++display control groups to which the thread belongs. ++T} ++ + thcount THCNT T{ + see + .BR nlwp . diff --git a/SOURCES/procps-ng-3.3.10-ps-thcount-format-option.patch b/SOURCES/procps-ng-3.3.10-ps-thcount-format-option.patch new file mode 100644 index 0000000..7e36b07 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-ps-thcount-format-option.patch @@ -0,0 +1,13 @@ +diff -aur procps-ng-3.3.10/ps/output.c ../procps-ng-3.3.10/ps/output.c +--- procps-ng-3.3.10/ps/output.c 2014-09-23 13:40:36.000000000 +0200 ++++ ../procps-ng-3.3.10/ps/output.c 2016-06-06 18:58:36.267123736 +0200 +@@ -1622,8 +1622,8 @@ + {"sz", "SZ", pr_sz, sr_nop, 5, 0, HPU, PO|RIGHT}, + {"taskid", "TASKID", pr_nop, sr_nop, 5, 0, SUN, TO|PIDMAX|RIGHT}, // is this a thread ID? + {"tdev", "TDEV", pr_nop, sr_nop, 4, 0, XXX, AN|RIGHT}, +-{"thcount", "THCNT", pr_nlwp, sr_nlwp, 5, 0, AIX, PO|RIGHT}, + {"tgid", "TGID", pr_procs, sr_procs, 5, 0, LNX, PO|PIDMAX|RIGHT}, ++{"thcount", "THCNT", pr_nlwp, sr_nlwp, 5, 0, AIX, PO|RIGHT}, + {"tid", "TID", pr_tasks, sr_tasks, 5, 0, AIX, TO|PIDMAX|RIGHT}, + {"time", "TIME", pr_time, sr_time, 8, 0, U98, ET|RIGHT}, /*cputime*/ /* was 6 wide */ + {"timeout", "TMOUT", pr_nop, sr_nop, 5, 0, LNX, AN|RIGHT}, // 2.0.xx era diff --git a/SOURCES/procps-ng-3.3.10-slabtop-use-val-float.patch b/SOURCES/procps-ng-3.3.10-slabtop-use-val-float.patch new file mode 100644 index 0000000..42ed9df --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-slabtop-use-val-float.patch @@ -0,0 +1,21 @@ +diff -up ./proc/slab.c.ori ./proc/slab.c +--- ./proc/slab.c.ori 2017-03-13 17:14:22.684744976 +0100 ++++ ./proc/slab.c 2017-03-13 17:14:28.836719945 +0100 +@@ -179,7 +179,7 @@ static int parse_slabinfo20(struct slab_ + curr->cache_size = (unsigned long)curr->nr_slabs * curr->pages_per_slab * page_size; + + if (curr->nr_objs) { +- curr->use = 100 * curr->nr_active_objs / curr->nr_objs; ++ curr->use = 100 * (float)curr->nr_active_objs / curr->nr_objs; + stats->nr_active_caches++; + } else + curr->use = 0; +@@ -258,7 +258,7 @@ static int parse_slabinfo11(struct slab_ + curr->cache_size = (unsigned long)curr->nr_slabs * curr->pages_per_slab * page_size; + + if (curr->nr_objs) { +- curr->use = 100 * curr->nr_active_objs / curr->nr_objs; ++ curr->use = 100 * (float)curr->nr_active_objs / curr->nr_objs; + stats->nr_active_caches++; + } else + curr->use = 0; diff --git a/SOURCES/procps-ng-3.3.10-sysctl-conf-manpage-predef-note.patch b/SOURCES/procps-ng-3.3.10-sysctl-conf-manpage-predef-note.patch new file mode 100644 index 0000000..8f687ca --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-sysctl-conf-manpage-predef-note.patch @@ -0,0 +1,19 @@ +diff -up ./sysctl.conf.5.ori ./sysctl.conf.5 +--- ./sysctl.conf.5.ori 2017-04-06 18:59:51.718644400 +0200 ++++ ./sysctl.conf.5 2017-04-06 19:00:01.872604143 +0200 +@@ -28,6 +28,15 @@ token = value + Note that blank lines are ignored, and whitespace before and after a token or + value is ignored, although a value can contain whitespace within. Lines which + begin with a # or ; are considered comments and ignored. ++.SH NOTES ++As the ++.BR /etc/sysctl.conf ++file is used to override default kernel parameter values, only a small number of parameters is predefined in the file. ++Use ++.IR /sbin/sysctl\ \-a ++or follow ++.BR sysctl (8) ++to list all possible parameters. The description of individual parameters can be found in the kernel documentation. + .SH EXAMPLE + .RS + .sp diff --git a/SOURCES/procps-ng-3.3.10-sysctl-man-conf-override-hint.patch b/SOURCES/procps-ng-3.3.10-sysctl-man-conf-override-hint.patch new file mode 100644 index 0000000..0f3b3de --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-sysctl-man-conf-override-hint.patch @@ -0,0 +1,12 @@ +diff -up ./sysctl.8.ori ./sysctl.8 +--- ./sysctl.8.ori 2014-09-23 13:40:36.000000000 +0200 ++++ ./sysctl.8 2017-05-31 14:43:08.323364474 +0200 +@@ -78,7 +78,7 @@ values listing. + Print value without new line. + .TP + \fB\-\-system\fR +-Load settings from all system configuration files. ++Load settings from all system configuration files. Files are read from directories in the following list in given order from top to bottom. Once a file of a given filename is loaded, any file of the same name in subsequent directories is ignored. + .br + /run/sysctl.d/*.conf + .br diff --git a/SOURCES/procps-ng-3.3.10-top-instant-cpu-stats.patch b/SOURCES/procps-ng-3.3.10-top-instant-cpu-stats.patch new file mode 100644 index 0000000..a60a043 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-top-instant-cpu-stats.patch @@ -0,0 +1,166 @@ +diff -up ./top/top.c.ori ./top/top.c +--- ./top/top.c.ori 2017-04-07 18:36:05.953611338 +0200 ++++ ./top/top.c 2017-04-07 18:37:14.037321741 +0200 +@@ -91,6 +91,7 @@ static int Rc_questions; + static unsigned Pg2K_shft = 0; + + /* SMP, Irix/Solaris mode, Linux 2.5.xx support */ ++static CPU_t *Cpu_tics; + static int Cpu_faux_tot; + static float Cpu_pmax; + static const char *Cpu_States_fmts; +@@ -2356,10 +2357,10 @@ static void zap_fieldstab (void) { + * This guy's modeled on libproc's 'eight_cpu_numbers' function except + * we preserve all cpu data in our CPU_t array which is organized + * as follows: +- * cpus[0] thru cpus[n] == tics for each separate cpu +- * cpus[sumSLOT] == tics from the 1st /proc/stat line +- * [ and beyond sumSLOT == tics for each cpu NUMA node ] */ +-static CPU_t *cpus_refresh (CPU_t *cpus) { ++ * Cpu_tics[0] thru Cpu_tics[n] == tics for each separate cpu ++ * Cpu_tics[sumSLOT] == tics from /proc/stat line #1 ++ * [ and beyond sumSLOT == tics for each cpu NUMA node ] */ ++static void cpus_refresh (void) { + #define sumSLOT ( smp_num_cpus ) + #define totSLOT ( 1 + smp_num_cpus + Numa_node_tot) + static FILE *fp = NULL; +@@ -2377,7 +2378,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus) + sav_slot = sumSLOT; + zap_fieldstab(); + if (fp) { fclose(fp); fp = NULL; } +- if (cpus) { free(cpus); cpus = NULL; } ++ if (Cpu_tics) free(Cpu_tics); + } + + /* by opening this file once, we'll avoid the hit on minor page faults +@@ -2387,7 +2388,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus) + error_exit(fmtmk(N_fmt(FAIL_statopn_fmt), strerror(errno))); + /* note: we allocate one more CPU_t via totSLOT than 'cpus' so that a + slot can hold tics representing the /proc/stat cpu summary */ +- cpus = alloc_c(totSLOT * sizeof(CPU_t)); ++ Cpu_tics = alloc_c(totSLOT * sizeof(CPU_t)); + } + rewind(fp); + fflush(fp); +@@ -2410,7 +2411,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus) + #undef buffGRW + + // remember from last time around +- sum_ptr = &cpus[sumSLOT]; ++ sum_ptr = &Cpu_tics[sumSLOT]; + memcpy(&sum_ptr->sav, &sum_ptr->cur, sizeof(CT_t)); + // then value the last slot with the cpu summary line + if (4 > sscanf(bp, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu" +@@ -2437,7 +2438,7 @@ static CPU_t *cpus_refresh (CPU_t *cpus) + + // now value each separate cpu's tics... + for (i = 0; i < sumSLOT; i++) { +- CPU_t *cpu_ptr = &cpus[i]; // avoid gcc subscript bloat ++ CPU_t *cpu_ptr = &Cpu_tics[i]; // avoid gcc subscript bloat + #ifdef PRETEND8CPUS + bp = buf; + #endif +@@ -2448,7 +2449,6 @@ static CPU_t *cpus_refresh (CPU_t *cpus) + , &cpu_ptr->cur.u, &cpu_ptr->cur.n, &cpu_ptr->cur.s + , &cpu_ptr->cur.i, &cpu_ptr->cur.w, &cpu_ptr->cur.x + , &cpu_ptr->cur.y, &cpu_ptr->cur.z)) { +- memmove(cpu_ptr, sum_ptr, sizeof(CPU_t)); + break; // tolerate cpus taken offline + } + +@@ -2488,8 +2488,6 @@ static CPU_t *cpus_refresh (CPU_t *cpus) + } // end: for each cpu + + Cpu_faux_tot = i; // tolerate cpus taken offline +- +- return cpus; + #undef sumSLOT + #undef totSLOT + } // end: cpus_refresh +@@ -5119,7 +5117,6 @@ static void summary_hlp (CPU_t *cpu, con + static void summary_show (void) { + #define isROOM(f,n) (CHKw(w, f) && Msg_row + (n) < Screen_rows - 1) + #define anyFLG 0xffffff +- static CPU_t *smpcpu = NULL; + WIN_t *w = Curwin; // avoid gcc bloat with a local copy + char tmp[MEDBUFSIZ]; + int i; +@@ -5142,7 +5139,7 @@ static void summary_show (void) { + , Frame_stopped, Frame_zombied)); + Msg_row += 1; + +- smpcpu = cpus_refresh(smpcpu); ++ cpus_refresh(); + + #ifndef NUMA_DISABLE + if (!Numa_node_tot) goto numa_nope; +@@ -5150,11 +5147,11 @@ static void summary_show (void) { + if (CHKw(w, View_CPUNOD)) { + if (Numa_node_sel < 0) { + // display the 1st /proc/stat line, then the nodes (if room) +- summary_hlp(&smpcpu[smp_num_cpus], N_txt(WORD_allcpus_txt)); ++ summary_hlp(&Cpu_tics[smp_num_cpus], N_txt(WORD_allcpus_txt)); + Msg_row += 1; + // display each cpu node's states + for (i = 0; i < Numa_node_tot; i++) { +- CPU_t *nod_ptr = &smpcpu[1 + smp_num_cpus + i]; ++ CPU_t *nod_ptr = &Cpu_tics[1 + smp_num_cpus + i]; + if (!isROOM(anyFLG, 1)) break; + #ifndef OFF_NUMASKIP + if (nod_ptr->id) { +@@ -5169,13 +5166,13 @@ static void summary_show (void) { + } else { + // display the node summary, then the associated cpus (if room) + snprintf(tmp, sizeof(tmp), N_fmt(NUMA_nodenam_fmt), Numa_node_sel); +- summary_hlp(&smpcpu[1 + smp_num_cpus + Numa_node_sel], tmp); ++ summary_hlp(&Cpu_tics[1 + smp_num_cpus + Numa_node_sel], tmp); + Msg_row += 1; + for (i = 0; i < Cpu_faux_tot; i++) { +- if (Numa_node_sel == smpcpu[i].node) { ++ if (Numa_node_sel == Cpu_tics[i].node) { + if (!isROOM(anyFLG, 1)) break; +- snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), smpcpu[i].id); +- summary_hlp(&smpcpu[i], tmp); ++ snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), Cpu_tics[i].id); ++ summary_hlp(&Cpu_tics[i], tmp); + Msg_row += 1; + } + } +@@ -5185,14 +5182,14 @@ numa_nope: + #endif + if (CHKw(w, View_CPUSUM)) { + // display just the 1st /proc/stat line +- summary_hlp(&smpcpu[Cpu_faux_tot], N_txt(WORD_allcpus_txt)); ++ summary_hlp(&Cpu_tics[Cpu_faux_tot], N_txt(WORD_allcpus_txt)); + Msg_row += 1; + + } else { + // display each cpu's states separately, screen height permitting... + for (i = 0; i < Cpu_faux_tot; i++) { +- snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), smpcpu[i].id); +- summary_hlp(&smpcpu[i], tmp); ++ snprintf(tmp, sizeof(tmp), N_fmt(WORD_eachcpu_fmt), Cpu_tics[i].id); ++ summary_hlp(&Cpu_tics[i], tmp); + Msg_row += 1; + if (!isROOM(anyFLG, 1)) break; + } +@@ -5643,6 +5640,7 @@ static void frame_make (void) { + + // whoa either first time or thread/task mode change, (re)prime the pump... + if (Pseudo_row == PROC_XTRA) { ++ cpus_refresh(); + procs_refresh(); + usleep(LIB_USLEEP); + putp(Cap_clr_scr); +diff -up ./top/top.h.ori ./top/top.h +--- ./top/top.h.ori 2017-04-07 18:36:14.921573192 +0200 ++++ ./top/top.h 2017-04-07 18:37:14.037321741 +0200 +@@ -728,7 +728,7 @@ typedef struct WIN_t { + //atic inline void widths_resize (void); + //atic void zap_fieldstab (void); + /*------ Library Interface ---------------------------------------------*/ +-//atic CPU_t *cpus_refresh (CPU_t *cpus); ++//atic void cpus_refresh (void); + #ifdef OFF_HST_HASH + //atic inline HST_t *hstbsrch (HST_t *hst, int max, int pid); + #else diff --git a/SOURCES/procps-ng-3.3.10-top-strange-mem-val-scaling.patch b/SOURCES/procps-ng-3.3.10-top-strange-mem-val-scaling.patch new file mode 100644 index 0000000..786eeae --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-top-strange-mem-val-scaling.patch @@ -0,0 +1,111 @@ +diff -up ./configure.ac.ori ./configure.ac +--- ./configure.ac.ori 2014-09-23 13:40:36.000000000 +0200 ++++ ./configure.ac 2017-08-02 13:04:25.439881501 +0200 +@@ -218,11 +218,11 @@ if test "x$enable_wide_percent" = xyes; + fi + + AC_ARG_ENABLE([wide-memory], +- AS_HELP_STRING([--disable-wide-memory], [disable extra precision under memory fields for top]), +- [], [enable_wide_memory=yes] ++ AS_HELP_STRING([--enable-wide-memory], [provide extra precision under memory fields for top]), ++ [], [enable_wide_memory=no] + ) +-if test "x$enable_wide_memory" = xno; then +- AC_DEFINE(NOBOOST_MEMS, 1, [disable extra precision under memory fields for top]) ++if test "x$enable_wide_memory" = xyes; then ++ AC_DEFINE(BOOST_MEMORY, 1, [provide extra precision under memory fields for top]) + fi + + AC_ARG_ENABLE([modern-top], +diff -up ./top/top.c.ori ./top/top.c +--- ./top/top.c.ori 2017-08-02 12:56:41.681326790 +0200 ++++ ./top/top.c 2017-08-02 13:50:24.953331241 +0200 +@@ -1542,11 +1542,11 @@ static inline const char *make_str (cons + * We'll interpret 'num' as a kibibytes quantity and try to + * format it to reach 'target' while also fitting 'width'. */ + static const char *scale_mem (int target, unsigned long num, int width, int justr) { +-#ifndef NOBOOST_MEMS + // SK_Kb SK_Mb SK_Gb SK_Tb SK_Pb SK_Eb ++#ifdef BOOST_MEMORY + static const char *fmttab[] = { "%.0f", "%#.1f%c", "%#.3f%c", "%#.3f%c", "%#.3f%c", NULL }; + #else +- static const char *fmttab[] = { "%.0f", "%.0f%c", "%.0f%c", "%.0f%c", "%.0f%c", NULL }; ++ static const char *fmttab[] = { "%.0f", "%.1f%c", "%.1f%c", "%.1f%c", "%.1f%c", NULL }; + #endif + static char buf[SMLBUFSIZ]; + float scaled_num; +@@ -1750,21 +1750,12 @@ static FLD_t Fieldstab[] = { + #else + { 4, -1, A_right, SF(RES), L_statm }, // EU_MEM slot + #endif +-#ifndef NOBOOST_MEMS + { 7, SK_Kb, A_right, SF(VRT), L_statm }, + { 6, SK_Kb, A_right, SF(SWP), L_status }, + { 6, SK_Kb, A_right, SF(RES), L_statm }, + { 6, SK_Kb, A_right, SF(COD), L_statm }, + { 7, SK_Kb, A_right, SF(DAT), L_statm }, + { 6, SK_Kb, A_right, SF(SHR), L_statm }, +-#else +- { 5, SK_Kb, A_right, SF(VRT), L_statm }, +- { 4, SK_Kb, A_right, SF(SWP), L_status }, +- { 4, SK_Kb, A_right, SF(RES), L_statm }, +- { 4, SK_Kb, A_right, SF(COD), L_statm }, +- { 5, SK_Kb, A_right, SF(DAT), L_statm }, +- { 4, SK_Kb, A_right, SF(SHR), L_statm }, +-#endif + { 4, -1, A_right, SF(FL1), L_stat }, + { 4, -1, A_right, SF(FL2), L_stat }, + { 4, -1, A_right, SF(DRT), L_statm }, +@@ -1785,11 +1776,7 @@ static FLD_t Fieldstab[] = { + { -1, -1, A_left, SF(ENV), L_ENVIRON }, + { 3, -1, A_right, SF(FV1), L_stat }, + { 3, -1, A_right, SF(FV2), L_stat }, +-#ifndef NOBOOST_MEMS + { 6, SK_Kb, A_right, SF(USE), L_USED }, +-#else +- { 4, SK_Kb, A_right, SF(USE), L_USED }, +-#endif + { 10, -1, A_right, SF(NS1), L_NS }, // IPCNS + { 10, -1, A_right, SF(NS2), L_NS }, // MNTNS + { 10, -1, A_right, SF(NS3), L_NS }, // NETNS +@@ -5208,12 +5195,20 @@ numa_nope: + const char *fmts; + const char *label; + } scaletab[] = { +- { 1, "%1.0f ", NULL }, // kibibytes +- { 1024.0, "%#4.3f ", NULL }, // mebibytes +- { 1024.0*1024, "%#4.3f ", NULL }, // gibibytes +- { 1024.0*1024*1024, "%#4.3f ", NULL }, // tebibytes +- { 1024.0*1024*1024*1024, "%#4.3f ", NULL }, // pebibytes +- { 1024.0*1024*1024*1024*1024, "%#4.3f ", NULL } // exbibytes ++ { 1, "%.0f ", NULL }, // kibibytes ++#ifdef BOOST_MEMORY ++ { 1024.0, "%#.3f ", NULL }, // mebibytes ++ { 1024.0*1024, "%#.3f ", NULL }, // gibibytes ++ { 1024.0*1024*1024, "%#.3f ", NULL }, // tebibytes ++ { 1024.0*1024*1024*1024, "%#.3f ", NULL }, // pebibytes ++ { 1024.0*1024*1024*1024*1024, "%#.3f ", NULL } // exbibytes ++#else ++ { 1024.0, "%#.1f ", NULL }, // mebibytes ++ { 1024.0*1024, "%#.1f ", NULL }, // gibibytes ++ { 1024.0*1024*1024, "%#.1f ", NULL }, // tebibytes ++ { 1024.0*1024*1024*1024, "%#.1f ", NULL }, // pebibytes ++ { 1024.0*1024*1024*1024*1024, "%#.1f ", NULL } // exbibytes ++#endif + }; + struct { // 0123456789 + // snprintf contents of each buf (after SK_Kb): 'nnnn.nnn 0' +diff -up ./top/top.h.ori ./top/top.h +--- ./top/top.h.ori 2017-08-02 12:56:41.681326790 +0200 ++++ ./top/top.h 2017-08-02 13:04:25.446881464 +0200 +@@ -23,8 +23,8 @@ + #include "../proc/readproc.h" + + /* Defines represented in configure.ac ----------------------------- */ +-//#define BOOST_PERCNT /* enable extra precision for two % fields */ +-//#define NOBOOST_MEMS /* disable extra precision for mem fields */ ++//#define BOOST_MEMORY /* enable extra precision for mem fields */ ++//#define BOOST_PERCNT /* enable extra precision for 2 % fields */ + //#define NUMA_DISABLE /* disable summary area NUMA/Nodes display */ + //#define OOMEM_ENABLE /* enable the SuSE out-of-memory additions */ + //#define ORIG_TOPDEFS /* with no rcfile retain original defaults */ diff --git a/SOURCES/procps-ng-3.3.10-vmstat-devlen.patch b/SOURCES/procps-ng-3.3.10-vmstat-devlen.patch new file mode 100644 index 0000000..e41de18 --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-vmstat-devlen.patch @@ -0,0 +1,57 @@ +diff -Naur procps-ng-3.3.10.orig/proc/sysinfo.c procps-ng-3.3.10/proc/sysinfo.c +--- procps-ng-3.3.10.orig/proc/sysinfo.c 2016-01-14 15:57:33.000000000 +0100 ++++ procps-ng-3.3.10/proc/sysinfo.c 2016-01-14 16:40:01.290000000 +0100 +@@ -988,7 +988,7 @@ + int cPartition = 0; + int fields; + unsigned dummy; +- char devname[32]; ++ char devname[35]; + + *disks = NULL; + *partitions = NULL; +@@ -1001,10 +1001,10 @@ + fclose(fd); + break; + } +- fields = sscanf(buff, " %*d %*d %15s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", devname, &dummy); ++ fields = sscanf(buff, " %*d %*d %34s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", devname, &dummy); + if (fields == 2 && is_disk(devname)){ + (*disks) = xrealloc(*disks, (cDisk+1)*sizeof(struct disk_stat)); +- sscanf(buff, " %*d %*d %15s %u %u %llu %u %u %u %llu %u %u %u %u", ++ sscanf(buff, " %*d %*d %31s %u %u %llu %u %u %u %llu %u %u %u %u", + //&disk_major, + //&disk_minor, + (*disks)[cDisk].disk_name, +@@ -1026,8 +1026,8 @@ + (*partitions) = xrealloc(*partitions, (cPartition+1)*sizeof(struct partition_stat)); + fflush(stdout); + sscanf(buff, (fields == 2) +- ? " %*d %*d %15s %u %*u %llu %*u %u %*u %llu %*u %*u %*u %*u" +- : " %*d %*d %15s %u %llu %u %llu", ++ ? " %*d %*d %34s %u %*u %llu %*u %u %*u %llu %*u %*u %*u %*u" ++ : " %*d %*d %34s %u %llu %u %llu", + //&part_major, + //&part_minor, + (*partitions)[cPartition].partition_name, +diff -Naur procps-ng-3.3.10.orig/proc/sysinfo.h procps-ng-3.3.10/proc/sysinfo.h +--- procps-ng-3.3.10.orig/proc/sysinfo.h 2014-09-23 13:40:36.000000000 +0200 ++++ procps-ng-3.3.10/proc/sysinfo.h 2016-01-14 16:30:02.326000000 +0100 +@@ -101,7 +101,7 @@ + typedef struct disk_stat{ + unsigned long long reads_sectors; + unsigned long long written_sectors; +- char disk_name [16]; ++ char disk_name [32]; + unsigned inprogress_IO; + unsigned merged_reads; + unsigned merged_writes; +@@ -115,7 +115,7 @@ + }disk_stat; + + typedef struct partition_stat{ +- char partition_name [16]; ++ char partition_name [35]; + unsigned long long reads_sectors; + unsigned parent_disk; // index into a struct disk_stat array + unsigned reads; diff --git a/SOURCES/procps-ng-3.3.10-vmstat-long-device-name.patch b/SOURCES/procps-ng-3.3.10-vmstat-long-device-name.patch new file mode 100644 index 0000000..91c72ec --- /dev/null +++ b/SOURCES/procps-ng-3.3.10-vmstat-long-device-name.patch @@ -0,0 +1,13 @@ +diff --git a/proc/sysinfo.c b/proc/sysinfo.c +index baa2453..c95f378 100644 +--- a/proc/sysinfo.c ++++ b/proc/sysinfo.c +@@ -979,7 +979,7 @@ unsigned int getpartitions_num(struct disk_stat *disks, int ndisks){ + ///////////////////////////////////////////////////////////////////////////// + static int is_disk(char *dev) + { +- char syspath[32]; ++ char syspath[64]; + char *slash; + + while ((slash = strchr(dev, '/'))) diff --git a/SPECS/procps-ng.spec b/SPECS/procps-ng.spec new file mode 100644 index 0000000..e6b4389 --- /dev/null +++ b/SPECS/procps-ng.spec @@ -0,0 +1,401 @@ +# The testsuite is unsuitable for running on buildsystems +%global tests_enabled 0 + +Summary: System and process monitoring utilities +Name: procps-ng +Version: 3.3.10 +Release: 17%{?dist} +License: GPL+ and GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+ +Group: Applications/System +URL: https://sourceforge.net/projects/procps-ng/ + +Source: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.xz + +Patch0: procps-ng-3.3.10-pmap-skip-vmflags.patch +Patch1: procps-ng-3.3.10-free-uninitialized-errno.patch +Patch2: procps-ng-3.3.10-ps-thcount-format-option.patch +Patch3: procps-ng-3.3.10-vmstat-devlen.patch +Patch4: procps-ng-3.3.10-find_elf_note-memory-error-fix.patch +Patch5: procps-ng-3.3.10-ps-scattered-thread-cgroups.patch +Patch6: procps-ng-3.3.10-vmstat-long-device-name.patch +Patch7: procps-ng-3.3.10-ps-full-wchan-name.patch +Patch8: procps-ng-3.3.10-pmap-lines-twice.patch +Patch9: procps-ng-3.3.10-slabtop-use-val-float.patch +Patch10: procps-ng-3.3.10-sysctl-conf-manpage-predef-note.patch +Patch11: procps-ng-3.3.10-top-instant-cpu-stats.patch +Patch12: procps-ng-3.3.10-sysctl-man-conf-override-hint.patch +Patch13: procps-ng-3.3.10-top-strange-mem-val-scaling.patch + + +Requires(post): /sbin/ldconfig +Requires(postun): /sbin/ldconfig + +BuildRequires: ncurses-devel +BuildRequires: libtool +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: gettext-devel +BuildRequires: systemd-devel + +%if %{tests_enabled} +BuildRequires: dejagnu +%endif + +Provides: procps = %{version}-%{release} +Obsoletes: procps < 3.2.9-1 + +# usrmove hack - will be removed once initscripts are fixed +Provides: /sbin/sysctl +Provides: /bin/ps + +%description +The procps package contains a set of system utilities that provide +system information. Procps includes ps, free, skill, pkill, pgrep, +snice, tload, top, uptime, vmstat, w, watch and pwdx. The ps command +displays a snapshot of running processes. The top command provides +a repetitive update of the statuses of running processes. The free +command displays the amounts of free and used memory on your +system. The skill command sends a terminate command (or another +specified signal) to a specified set of processes. The snice +command is used to change the scheduling priority of specified +processes. The tload command prints a graph of the current system +load average to a specified tty. The uptime command displays the +current time, how long the system has been running, how many users +are logged on, and system load averages for the past one, five, +and fifteen minutes. The w command displays a list of the users +who are currently logged on and what they are running. The watch +program watches a running program. The vmstat command displays +virtual memory statistics about processes, memory, paging, block +I/O, traps, and CPU activity. The pwdx command reports the current +working directory of a process or processes. + +%package devel +Summary: System and process monitoring utilities +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{version}-%{release} +Provides: procps-devel = %{version}-%{release} +Obsoletes: procps-devel < 3.2.9-1 + +%description devel +System and process monitoring utilities development headers + +%package i18n +Summary: Internationalization pack for procps-ng +Group: Applications/System +Requires: %{name} = %{version}-%{release} + +%description i18n +Internationalization pack for procps-ng + + +%prep +%setup -q -n %{name}-%{version} + +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 + + +%build +# The following stuff is needed for git archives only +#echo "%{version}" > .tarball-version +#./autogen.sh + +autoreconf --verbose --force --install + +./configure --prefix=/ \ + --bindir=%{_bindir} \ + --sbindir=%{_sbindir} \ + --libdir=%{_libdir} \ + --mandir=%{_mandir} \ + --includedir=%{_includedir} \ + --sysconfdir=%{_sysconfdir} \ + --localedir=%{_datadir}/locale \ + --docdir=/unwanted \ + --disable-static \ + --enable-w-from \ + --disable-kill \ + --disable-rpath \ + --enable-watch8bit \ + --enable-skill \ + --enable-sigwinch \ + --enable-libselinux \ + --with-systemd \ + --disable-pidof \ + --disable-modern-top + +make CFLAGS="%{optflags}" + + +%if %{tests_enabled} +%check +make check +%endif + + +%install +make DESTDIR=%{buildroot} install + +# --localedir doesn't work correctly +mv %{buildroot}/share/locale %{buildroot}%{_datadir} +rmdir %{buildroot}/share + +# translated man pages +#find man-po/ -type d -maxdepth 1 -mindepth 1 | while read dirname; do cp -a $dirname %{buildroot}/usr/share/man/ ; done + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%doc AUTHORS Documentation/BUGS COPYING COPYING.LIB Documentation/FAQ NEWS README top/README.top Documentation/TODO + +%{_libdir}/libprocps.so.* +%{_bindir}/* +%{_sbindir}/* +%{_mandir}/man1/* +%{_mandir}/man8/* +%{_mandir}/man5/* +#%%{_mandir}/*/man1/* +#%%{_mandir}/*/man8/* +#%%{_mandir}/*/man5/* + +%exclude %{_libdir}/libprocps.la +%exclude %{_sysconfdir}/sysctl.conf +%exclude /unwanted/* + +%files devel +%doc COPYING COPYING.LIB +%{_libdir}/libprocps.so +%{_libdir}/pkgconfig/libprocps.pc +%{_includedir}/proc +%{_mandir}/man3/* + +%files i18n +%{_datadir}/locale/* + +%changelog +* Wed Sep 06 2017 Jan Rybar - 3.3.10-17 +- top: strange unit scaling with high memory values +- Resolves: rhbz#1253851 + +* Wed May 31 2017 Jan Rybar - 3.3.10-16 +- sysctl manpage: Added explanation of conf files precedence +- Resolves: rhbz#1456905 + +* Fri Apr 07 2017 Jan Rybar - 3.3.10-15 +- top - real CPU statistics instead of since-boot are shown at start +- Resolves: rhbz#1182327 + +* Fri Apr 07 2017 Jan Rybar - 3.3.10-14 +- sysctl.conf manpage: note about predefined values added +- Resolves: rhbz#1439837 + +* Mon Mar 13 2017 Jan Rybar - 3.3.10-13 +- slabtop: incorrect computation of "used" value, use float to fix +- Resolves: rhbz#1329958 + +* Mon Feb 20 2017 Jan Rybar - 3.3.10-12 +- pmap no longer shows each line twice with blank values on newer kernels +- Resolves: rhbz#1330417 + +* Tue Jan 31 2017 Jan Rybar - 3.3.10-11 +- ps no longer removes 'do_' and 'sys_' from wchan data +- Resolves: rhbz#1373246 + +* Tue Jul 26 2016 Jan Rybar - 3.3.10-10 +- Fixes sysinfo - devices with name longer than 20 chars are mistaken for partitions +- Resolves: rhbz#1169349 + +* Thu Jul 07 2016 Jan Rybar - 3.3.10-9 +- Fixes showing same cgroups for threads under process by adding format option +- Resolves: rhbz#1284087 + +* Mon Jul 04 2016 Jan Rybar - 3.3.10-8 +- Fixes obtaining environment variables in find_elf_note function +- Resolves: rhbz#1287752 + +* Thu Jun 09 2016 Jan Rybar - 3.3.10-7 +- Fixing sysinfo - devices with length exceeding 15 chars are not displayed in vmstat -d +- Resolves: #1169349 + +* Mon Jun 06 2016 Jan Rybar - 3.3.10-6 +- #1174311 - ps - thcount not recognized as a format option +- Resolves: #1174311 + +* Tue Dec 01 2015 Jaromir Capik - 3.3.10-5 +- #1287038 - free - error while parsing arguments +- Resolves: #1287038 + +* Tue Nov 24 2015 Jaromir Capik - 3.3.10-4 +- #1262864 - Correctly skip vmflags (and other keys starting with A-Z) +- Resolves: #1262864 + +* Mon Oct 06 2014 Jaromir Capik - 3.3.10-3 +- Disabling translated man pages due to conflicts with man-pages-* +- Removing /etc/sysctl.d (quietly stolen by systemd) +- Related: rhbz#1119263 rhbz#1119260 rhbz#1060715 rhbz#1113206 +- Related: rhbz#1112734 rhbz#1078310 rhbz#1116309 rhbz#1070736 + +* Tue Sep 23 2014 Jaromir Capik - 3.3.10-2 +- Replacing RC tarball with final 3.3.10 release +- Related: rhbz#1119263 rhbz#1119260 rhbz#1060715 rhbz#1113206 +- Related: rhbz#1112734 rhbz#1078310 rhbz#1116309 rhbz#1070736 + +* Tue Sep 09 2014 Jaromir Capik - 3.3.10-1 +- Upgrading to 3.3.10 +- top.1: physical memory - has used / is using (#1119263) +- Include man pages for openproc, readproc and readproctab (#1119260) +- ps -p cycles over all PIDs instead of just one (#1060715) +- Remove explicit dependency on systemd-libs package (#1113206) +- Allow longer usernames to display in ps output (#1112734) +- w doesn't display FROM by default (#1078310) +- Return value of pgrep is incorrect (#1116309) +- Should shared memory be accounted in cached in free output? (#1070736) +- Resolves: rhbz#1119263 rhbz#1119260 rhbz#1060715 rhbz#1113206 +- Resolves: rhbz#1112734 rhbz#1078310 rhbz#1116309 rhbz#1070736 + +* Thu Feb 27 2014 Jaromir Capik - 3.3.9-6 +- Subtracting Shmem from Cached (#1070736) +- Resolves: rhbz#1070736 + +* Thu Feb 06 2014 Jaromir Capik - 3.3.9-5 +- Support for timestamps & wide diskstat (#1053428, #1025833) +- Fixing fd leak in watch +- Fixing format-security build issues +- Skipping trailing zeros in read_unvectored (#1057600) +- Resolves: rhbz#1053428, Related: rhbz#1025833 + +* Fri Jan 24 2014 Daniel Mach - 3.3.9-4 +- Mass rebuild 2014-01-24 + +* Mon Jan 20 2014 Jaromir Capik - 3.3.9-3 +- 'vmstat -w' was not wide enough (#1025833) +- Related: rhbz#1025833 + +* Fri Dec 27 2013 Daniel Mach - 3.3.9-2 +- Mass rebuild 2013-12-27 + +* Tue Dec 03 2013 Jaromir Capik - 3.3.9-1 +- Update to 3.3.9 +- Resolves: rhbz#1025833 rhbz#1025774 rhbz#1027109 + +* Mon Oct 21 2013 Jaromir Capik - 3.3.8-15 +- Fixing incorrect format specifier (introduced with namespaces) + +* Tue Sep 17 2013 Aristeu Rozanski - 3.3.8-14 +- Introduce namespaces support (#980516) + +* Fri Aug 09 2013 Jaromir Capik - 3.3.8-13 +- Including forgotten man fixes (#948522) + +* Wed Aug 07 2013 Jaromir Capik - 3.3.8-12 +- Fixing the license tag + +* Wed Aug 07 2013 Jaromir Capik - 3.3.8-11 +- Support for libselinux (#975459) +- Support for systemd (#994457) +- Support for 'Shmem' in free (#993271) + +* Sun Aug 04 2013 Fedora Release Engineering - 3.3.8-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Fri Jul 19 2013 Jaromir Capik - 3.3.8-9 +- RH man page scan (#948522) + +* Tue Jul 02 2013 Jaromir Capik - 3.3.8-8 +- Extending the end-of-job patch disabling the screen content restoration + +* Mon Jul 01 2013 Jaromir Capik - 3.3.8-7 +- Disabling screen content restoration when exiting 'top' (#977561) +- Enabling SIGWINCH flood prevention + +* Wed Jun 26 2013 Jaromir Capik - 3.3.8-6 +- Avoiding "write error" messages when piping to grep (#976199) + +* Wed Jun 26 2013 Jaromir Capik - 3.3.8-5 +- Disabling tests - unsuitable for running on buildsystems + +* Mon Jun 17 2013 Jaromir Capik - 3.3.8-4 +- Enabling skill and snice (#974752) + +* Wed Jun 12 2013 Jaromir Capik - 3.3.8-3 +- Adding major version in the libnuma soname + +* Thu May 30 2013 Jaromir Capik - 3.3.8-2 +- watch: enabling UTF-8 (#965867) + +* Wed May 29 2013 Jaromir Capik - 3.3.8-1 +- Update to 3.3.8 + +* Wed May 22 2013 Jaromir Capik - 3.3.7-4 +- top: inoculated against a window manager like 'screen' (#962022) + +* Tue Apr 16 2013 Jaromir Capik - 3.3.7-3 +- Avoid segfaults when reading zero bytes - file2str (#951391) + +* Mon Apr 15 2013 Jaromir Capik - 3.3.7-2 +- Moving libprocps.pc to the devel subpackage (#951726) + +* Tue Mar 26 2013 Jaromir Capik - 3.3.7-1 +- Update to 3.3.7 +- Reverting upstream commit for testsuite/unix.exp + +* Tue Feb 05 2013 Jaromir Capik - 3.3.6-4 +- Fixing empty pmap output on ppc/s390 (#906457) + +* Tue Jan 15 2013 Jaromir Capik - 3.3.6-3 +- Typo in the description, pdwx instead of pwdx (#891476) + +* Tue Jan 08 2013 Jaromir Capik - 3.3.6-2 +- Rebuilding with tests disabled (koji issue #853084) + +* Tue Jan 08 2013 Jaromir Capik - 3.3.6-1 +- Update to 3.3.6 +- Changing URL/Source from gitorious to recently created sourceforge page +- Replacing autogen.sh with autoreconf + +* Mon Jan 07 2013 Jaromir Capik - 3.3.5-1 +- Update to 3.3.5 + +* Tue Dec 11 2012 Jaromir Capik - 3.3.4-2 +- fixing the following regressions: +- negative ETIME field in ps (#871819) +- procps states a bug is hit when receiving a signal (#871824) +- allow core file generation by ps command (#871825) + +* Tue Dec 11 2012 Jaromir Capik - 3.3.4-1 +- Update to 3.3.4 + +* Tue Sep 25 2012 Jaromir Capik - 3.3.3-3.20120807git +- SELinux spelling fixes (#859900) + +* Tue Aug 21 2012 Jaromir Capik - 3.3.3-2.20120807git +- Tests enabled + +* Tue Aug 07 2012 Jaromir Capik - 3.3.3-1.20120807git +- Update to 3.3.3-20120807git + +* Sat Jul 21 2012 Fedora Release Engineering - 3.3.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Mar 08 2012 Jaromir Capik - 3.3.2-3 +- Second usrmove hack - providing /bin/ps + +* Tue Mar 06 2012 Jaromir Capik - 3.3.2-2 +- Fixing requires in the devel subpackage (missing %{?_isa} macro) +- License statement clarification (upstream patch referrenced in the spec header) + +* Mon Feb 27 2012 Jaromir Capik - 3.3.2-1 +- Initial version