diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..694ccdd
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,134 @@
+#
+#    Copyright (c) 2010-2011 Nest, Inc.
+#    All rights reserved.
+#
+#    This document is the property of Nest. It is considered
+#    confidential and proprietary information.
+#
+#    This document may not be reproduced or transmitted in any form,
+#    in whole or in part, without the express written permission of
+#    Nest.
+#
+#    Description:
+#      This file is for the Linux process utilities, procps. These
+#      utilities provide both command line and full-screen information
+#      about the Linux process table and the processes within it.
+#
+
+
+include pre.mak
+
+PackageName		:= procps
+
+PackageExtension	:= tar.gz
+PackageSeparator	:= -
+
+PackagePatchArgs	:= -p1
+
+PackageArchive		:= $(PackageName).$(PackageExtension)
+PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)
+
+PackageBuildMakefile	= $(call GenerateBuildPaths,Makefile)
+
+LicenseSourceFiles	:= COPYING COPYING.LIB
+LicenseSourcePaths      := $(addprefix $(PackageSourceDir)/,$(LicenseSourceFiles))
+
+CleanPaths		+= $(PackageLicenseFile)
+
+LinuxDir		:= sw/tps/linux
+LinuxIncDir		:= $(call GenerateResultPaths,$(LinuxDir),include)
+
+NCursesDir		:= sw/tps/ncurses
+NCursesIncDir		:= $(call GenerateResultPaths,$(NCursesDir),usr/include)
+NCursesLibDir		:= $(call GenerateResultPaths,$(NCursesDir),usr/lib)
+
+SOURCEDIRS                      = $(PackageSourceDir)
+$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+$(LicenseSourcePaths): $(BuildDirectory)/source
+
+$(PackageLicenseFile): $(LicenseSourcePaths)
+	$(Verbose)for file in $(LicenseSourcePaths); do	\
+		echo "Concatenating \"$${file}\"...";	\
+		cat $${file} >> $@;			\
+	done
+	$(Verbose)touch $@
+
+# Extract the source from the archive and apply patches, if any.
+
+$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
+	$(expand-and-patch-package)
+
+# Prepare the sources.
+
+$(BuildDirectory)/source: | $(PackageSourceDir)
+	$(Verbose)touch $@
+
+# Patch the sources, if necessary.
+
+$(BuildDirectory)/patch: $(BuildDirectory)/source
+	$(Verbose)touch $@
+
+# Generate the package build makefile.
+# Configure the source for building.
+
+$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
+	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))
+	$(Verbose)touch $@
+
+# Build the source.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+
+$(BuildDirectory)/build: $(BuildDirectory)/configure | $(BuildDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \
+	CPPFLAGS="$(call ToolGenerateIncludeArgument,$(LinuxIncDir)) \
+	$(call ToolGenerateIncludeArgument,$(NCursesIncDir))" \
+	LDFLAGS="-L$(NCursesLibDir)" \
+	all
+	$(Verbose)touch $@
+
+# Stage the build to a temporary installation area.
+#
+# We have to unset MAKEFLAGS since they confuse the package build otherwise.
+#
+# Also, override both install and ldconfig. We aren't running install
+# for a native host and we aren't running as super user, so the
+# default actions for those won't otherwise work.
+
+.PHONY: stage
+stage: $(BuildDirectory)/stage-default $(BuildDirectory)/stage-headers
+
+$(BuildDirectory)/stage-default: $(BuildDirectory)/build | $(ResultDirectory)
+	$(Verbose)unset MAKEFLAGS && \
+	$(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \
+	DESTDIR=$(ResultDirectory) \
+	install="$(shell which install) -D" \
+	ldconfig="$(shell which true)" \
+        m64=-m32 \
+        lib64=lib \
+	install
+	$(Verbose)touch $@
+
+ResultHeaderDir			= $(ResultDirectory)/usr/include/proc
+SourceHeaderPaths		= $(wildcard $(BuildDirectory)/proc/*.h)
+
+$(ResultHeaderDir):
+	$(create-directory)
+
+$(BuildDirectory)/stage-headers: $(BuildDirectory)/build | $(ResultHeaderDir)
+	install --mode=0664 $(SourceHeaderPaths) $(ResultHeaderDir)
+	$(Verbose)touch $@
+
+clean:
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)
+
+include post.mak
diff --git a/procps.patches/procps-50.description b/procps.patches/procps-50.description
new file mode 100644
index 0000000..4438692
--- /dev/null
+++ b/procps.patches/procps-50.description
@@ -0,0 +1,2 @@
+This patch ensures that installed binaries are user-writable so that 
+they may be stripped.
diff --git a/procps.patches/procps-50.patch b/procps.patches/procps-50.patch
new file mode 100644
index 0000000..e00b5a9
--- /dev/null
+++ b/procps.patches/procps-50.patch
@@ -0,0 +1,36 @@
+diff -aruN a/Makefile b/Makefile
+--- a/Makefile	2009-05-10 11:50:48.000000000 -0700
++++ b/Makefile	2011-03-01 09:08:47.354663539 -0800
+@@ -222,7 +222,7 @@
+ ###### install
+ 
+ $(BINFILES) : all
+-	$(install) --mode a=rx $(notdir $@) $@
++	$(install) --mode 775 $(notdir $@) $@
+ 
+ $(MANFILES) : all
+ 	$(install) --mode a=r $(notdir $@) $@
+diff -aruN a/proc/module.mk b/proc/module.mk
+--- a/proc/module.mk	2004-09-23 06:10:42.000000000 -0700
++++ b/proc/module.mk	2011-03-01 09:06:01.843034588 -0800
+@@ -96,7 +96,7 @@
+ #################### install rules ###########################
+ 
+ $(lib)$(SOFILE) : proc/$(SONAME)
+-	$(install) --mode a=rx $< $@
++	$(install) --mode 775 $< $@
+ 
+ ifneq ($(SOLINK),$(SOFILE))
+ .PHONY: $(lib)$(SOLINK)
+diff -aruN a/ps/module.mk b/ps/module.mk
+--- a/ps/module.mk	2005-10-29 20:19:46.000000000 -0700
++++ b/ps/module.mk	2011-03-01 09:06:15.074510652 -0800
+@@ -33,7 +33,7 @@
+ 
+ 
+ $(bin)ps: ps/ps
+-	$(install) --mode a=rx $< $@
++	$(install) --mode 775 $< $@
+ 
+ $(man1)ps.1 : ps/ps.1
+ 	$(install) --mode a=r $< $@
diff --git a/procps.patches/procps-51.description b/procps.patches/procps-51.description
new file mode 100644
index 0000000..b2efd7f
--- /dev/null
+++ b/procps.patches/procps-51.description
@@ -0,0 +1 @@
+This patch fixes the stdlib name conflicts issue that happens for libc6-dev versions beyond 2.17.93, which was patched by https://gitorious.org/procps/procps/commit/24f1fbd9d051353dd8ebde048f1903d68834af74.patch . We couldn't apply that patch to our source directly, so it has been adapted.
diff --git a/procps.patches/procps-51.patch b/procps.patches/procps-51.patch
new file mode 100644
index 0000000..f6b5cc5
--- /dev/null
+++ b/procps.patches/procps-51.patch
@@ -0,0 +1,415 @@
+diff -Naur a/top.c b/top.c
+--- a/top.c	2007-05-28 09:04:00.000000000 -0700
++++ b/top.c	2014-09-04 13:24:59.862877761 -0700
+@@ -184,19 +184,19 @@
+          * 2 columns each.
+          */
+ 
+-SCB_NUMx(P_PID, XXXID)
+-SCB_NUMx(P_PPD, ppid)
+-SCB_STRx(P_URR, ruser)
+-SCB_NUMx(P_UID, euid)
+-SCB_STRx(P_URE, euser)
+-SCB_STRx(P_GRP, egroup)
+-SCB_NUMx(P_TTY, tty)
+-SCB_NUMx(P_PRI, priority)
+-SCB_NUMx(P_NCE, nice)
+-SCB_NUMx(P_CPN, processor)
+-SCB_NUM1(P_CPU, pcpu)
+-                                        // also serves P_TM2 !
+-static int sort_P_TME (const proc_t **P, const proc_t **Q)
++SCB_NUMx(EU_PID, XXXID)
++SCB_NUMx(EU_PPD, ppid)
++SCB_STRx(EU_URR, ruser)
++SCB_NUMx(EU_UID, euid)
++SCB_STRx(EU_URE, euser)
++SCB_STRx(EU_GRP, egroup)
++SCB_NUMx(EU_TTY, tty)
++SCB_NUMx(EU_PRI, priority)
++SCB_NUMx(EU_NCE, nice)
++SCB_NUMx(EU_CPN, processor)
++SCB_NUM1(EU_CPU, pcpu)
++                                        // also serves EU_TM2 !
++static int sort_EU_TME (const proc_t **P, const proc_t **Q)
+ {
+    if (Frame_ctimes) {
+       if ( ((*P)->cutime + (*P)->cstime + (*P)->utime + (*P)->stime)
+@@ -214,17 +214,17 @@
+    return SORT_eq;
+ }
+ 
+-SCB_NUM1(P_VRT, size)
+-SCB_NUM2(P_SWP, size, resident)
+-SCB_NUM1(P_RES, resident)               // also serves P_MEM !
+-SCB_NUM1(P_COD, trs)
+-SCB_NUM1(P_DAT, drs)
+-SCB_NUM1(P_SHR, share)
+-SCB_NUM1(P_FLT, maj_flt)
+-SCB_NUM1(P_DRT, dt)
+-SCB_NUMx(P_STA, state)
++SCB_NUM1(EU_VRT, size)
++SCB_NUM2(EU_SWP, size, resident)
++SCB_NUM1(EU_RES, resident)               // also serves EU_MEM !
++SCB_NUM1(EU_COD, trs)
++SCB_NUM1(EU_DAT, drs)
++SCB_NUM1(EU_SHR, share)
++SCB_NUM1(EU_FLT, maj_flt)
++SCB_NUM1(EU_DRT, dt)
++SCB_NUMx(EU_STA, state)
+ 
+-static int sort_P_CMD (const proc_t **P, const proc_t **Q)
++static int sort_EU_CMD (const proc_t **P, const proc_t **Q)
+ {
+    /* if a process doesn't have a cmdline, we'll consider it a kernel thread
+       -- since displayed tasks are given special treatment, we must too */
+@@ -238,8 +238,8 @@
+    return Frame_srtflg * strcmp((*Q)->cmd, (*P)->cmd);
+ }
+ 
+-SCB_NUM1(P_WCH, wchan)
+-SCB_NUM1(P_FLG, flags)
++SCB_NUM1(EU_WCH, wchan)
++SCB_NUM1(EU_FLG, flags)
+ 
+         /* ///////////////////////////////// special sort for prochlp() ! */
+ static int sort_HST_t (const HST_t *P, const HST_t *Q)
+@@ -562,7 +562,7 @@
+ 
+ // Show an error, but not right now.
+ // Due to the postponed opening of ksym, using open_psdb_message,
+-// if P_WCH had been selected and the program is restarted, the
++// if EU_WCH had been selected and the program is restarted, the
+ // message would otherwise be displayed prematurely.
+ static void msg_save (const char *fmts, ...) __attribute__((format(printf,1,2)));
+ static void msg_save (const char *fmts, ...)
+@@ -1213,7 +1213,7 @@
+ #define L_DEFAULT  PROC_FILLSTAT
+ 
+ // a temporary macro, soon to be undef'd...
+-#define SF(f) (QFP_t)sort_P_ ## f
++#define SF(f) (QFP_t)sort_EU_ ## f
+ 
+         /* These are our gosh darn 'Fields' !
+            They MUST be kept in sync with pflags !!
+@@ -1222,9 +1222,9 @@
+                  a cast when/if displayed provides minimal width protection. */
+ static FLD_t Fieldstab[] = {
+ /* .lflg anomolies:
+-      P_UID, L_NONE  - natural outgrowth of 'stat()' in readproc        (euid)
+-      P_CPU, L_stat  - never filled by libproc, but requires times      (pcpu)
+-      P_CMD, L_stat  - may yet require L_CMDLINE in reframewins  (cmd/cmdline)
++      EU_UID, L_NONE  - natural outgrowth of 'stat()' in readproc        (euid)
++      EU_CPU, L_stat  - never filled by libproc, but requires times      (pcpu)
++      EU_CMD, L_stat  - may yet require L_CMDLINE in reframewins  (cmd/cmdline)
+       L_EITHER       - must L_status, else 64-bit math, __udivdi3 on 32-bit !
+       keys   head           fmts     width   scale  sort   desc                     lflg
+      ------  -----------    -------  ------  -----  -----  ----------------------   -------- */
+@@ -1514,23 +1514,23 @@
+ 
+          case 'M':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_MEM;
++            rc->win[0].sortindx = EU_MEM;
+             break;
+          case 'P':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_CPU;
++            rc->win[0].sortindx = EU_CPU;
+             break;
+          case 'A':                      // supposed to be start_time
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_PID;
++            rc->win[0].sortindx = EU_PID;
+             break;
+          case 'T':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_TM2;
++            rc->win[0].sortindx = EU_TM2;
+             break;
+          case 'N':
+             c = 0; // for scoreboard
+-            rc->win[0].sortindx = P_PID;
++            rc->win[0].sortindx = EU_PID;
+             break;
+ 
+          default:
+@@ -1626,19 +1626,19 @@
+ 
+    pcpu_max_value = 99.9;
+ 
+-   Fieldstab[P_CPN].head = " P";
+-   Fieldstab[P_CPN].fmts = " %1u";
++   Fieldstab[EU_CPN].head = " P";
++   Fieldstab[EU_CPN].fmts = " %1u";
+    if(smp_num_cpus>9){
+-      Fieldstab[P_CPN].head = "  P";
+-      Fieldstab[P_CPN].fmts = " %2u";
++      Fieldstab[EU_CPN].head = "  P";
++      Fieldstab[EU_CPN].fmts = " %2u";
+    }
+    if(smp_num_cpus>99){
+-      Fieldstab[P_CPN].head = "   P";
+-      Fieldstab[P_CPN].fmts = " %3u";
++      Fieldstab[EU_CPN].head = "   P";
++      Fieldstab[EU_CPN].fmts = " %3u";
+    }
+    if(smp_num_cpus>999){
+-      Fieldstab[P_CPN].head = "    P";
+-      Fieldstab[P_CPN].fmts = " %4u";
++      Fieldstab[EU_CPN].head = "    P";
++      Fieldstab[EU_CPN].fmts = " %4u";
+    }
+ 
+    {
+@@ -1646,10 +1646,10 @@
+       unsigned pid_digits = get_pid_digits();
+       if(pid_digits<4) pid_digits=4;
+       snprintf(pid_fmt, sizeof pid_fmt, " %%%uu", pid_digits);
+-      Fieldstab[P_PID].fmts = pid_fmt;
+-      Fieldstab[P_PID].head = "        PID" + 10 - pid_digits;
+-      Fieldstab[P_PPD].fmts = pid_fmt;
+-      Fieldstab[P_PPD].head = "       PPID" + 10 - pid_digits;
++      Fieldstab[EU_PID].fmts = pid_fmt;
++      Fieldstab[EU_PID].head = "        PID" + 10 - pid_digits;
++      Fieldstab[EU_PPD].fmts = pid_fmt;
++      Fieldstab[EU_PPD].head = "       PPID" + 10 - pid_digits;
+    }
+ }
+ 
+@@ -1786,7 +1786,7 @@
+    if(Rc.mode_irixps && smp_num_cpus>1){
+       // good for 100 CPUs per process
+       pcpu_max_value = 9999.0;
+-      Fieldstab[P_CPU].fmts = " %4.0f";
++      Fieldstab[EU_CPU].fmts = " %4.0f";
+    }
+ 
+    // lastly, establish the true runtime secure mode and delay time
+@@ -2135,13 +2135,13 @@
+          }
+ 
+          // establish the final maxpflgs and prepare to grow the command column
+-         // heading via maxcmdln - it may be a fib if P_CMD wasn't encountered,
++         // heading via maxcmdln - it may be a fib if EU_CMD wasn't encountered,
+          // but that's ok because it won't be displayed anyway
+          w->maxpflgs = i;
+-         w->maxcmdln = Screen_cols - (strlen(w->columnhdr) - strlen(Fieldstab[P_CMD].head));
++         w->maxcmdln = Screen_cols - (strlen(w->columnhdr) - strlen(Fieldstab[EU_CMD].head));
+ 
+          // finally, we can build the true run-time columns header, format the
+-         // command column heading, if P_CMD is really being displayed, and
++         // command column heading, if EU_CMD is really being displayed, and
+          // rebuild the all-important PROC_FILLxxx flags that will be used
+          // until/if we're we're called again
+          *(s = w->columnhdr) = '\0';
+@@ -2149,9 +2149,9 @@
+          for (i = 0; i < w->maxpflgs; i++) {
+             int advance = (i==0) && !Rc.mode_altscr;
+             h = Fieldstab[w->procflags[i]].head;
+-            if (P_WCH == w->procflags[i]) needpsdb = 1;
+-            if (P_CMD == w->procflags[i]) {
+-               s = scat(s, fmtmk(Fieldstab[P_CMD].fmts+advance, w->maxcmdln, w->maxcmdln, "COMMAND"/*h*/  ));
++            if (EU_WCH == w->procflags[i]) needpsdb = 1;
++            if (EU_CMD == w->procflags[i]) {
++               s = scat(s, fmtmk(Fieldstab[EU_CMD].fmts+advance, w->maxcmdln, w->maxcmdln, "COMMAND"/*h*/  ));
+                if (CHKw(w, Show_CMDLIN)) {
+                   Frames_libflags |= L_CMDLINE;
+ //                if (w->maxcmdln > Frames_maxcmdln) Frames_maxcmdln = w->maxcmdln;
+@@ -2629,10 +2629,10 @@
+          if(Rc.mode_irixps && smp_num_cpus>1){
+             // good for 100 CPUs per process
+             pcpu_max_value = 9999.0;
+-            Fieldstab[P_CPU].fmts = " %4.0f";
++            Fieldstab[EU_CPU].fmts = " %4.0f";
+          } else {
+             pcpu_max_value = 99.9;
+-            Fieldstab[P_CPU].fmts = " %#4.1f";
++            Fieldstab[EU_CPU].fmts = " %#4.1f";
+          }
+          break;
+ 
+@@ -2836,8 +2836,8 @@
+             const unsigned  xkey;
+             const FLG_t     sort;
+          } xtab[] = {
+-            { "Memory", 'M', P_MEM, }, { "Numerical", 'N', P_PID, },
+-            { "CPU",    'P', P_CPU, }, { "Time",      'T', P_TM2  }, };
++            { "Memory", 'M', EU_MEM, }, { "Numerical", 'N', EU_PID, },
++            { "CPU",    'P', EU_CPU, }, { "Time",      'T', EU_TM2  }, };
+          int i;
+          for (i = 0; i < MAXTBL(xtab); ++i)
+             if (c == xtab[i].xkey) {
+@@ -3063,7 +3063,7 @@
+       int advance = (x==0) && !Rc.mode_altscr;
+ 
+       switch (i) {
+-         case P_CMD:
++         case EU_CMD:
+          {  char tmp[ROWBUFSIZ];
+             unsigned flags;
+ 	    int maxcmd = q->maxcmdln;
+@@ -3073,25 +3073,25 @@
+             MKCOL(q->maxcmdln, q->maxcmdln, tmp);
+          }
+             break;
+-         case P_COD:
++         case EU_COD:
+             MKCOL(scale_num(PAGES_TO_KB(p->trs), w, s));
+             break;
+-         case P_CPN:
++         case EU_CPN:
+             MKCOL((unsigned)p->processor);
+             break;
+-         case P_CPU:
++         case EU_CPU:
+          {  float u = (float)p->pcpu * Frame_tscale;
+             if (u > pcpu_max_value) u = pcpu_max_value;
+             MKCOL(u);
+          }
+             break;
+-         case P_DAT:
++         case EU_DAT:
+             MKCOL(scale_num(PAGES_TO_KB(p->drs), w, s));
+             break;
+-         case P_DRT:
++         case EU_DRT:
+             MKCOL(scale_num((unsigned)p->dt, w, s));
+             break;
+-         case P_FLG:
++         case EU_FLG:
+          {  char tmp[TNYBUFSIZ];
+             snprintf(tmp, sizeof(tmp), f, (long)p->flags);
+             for (j = 0; tmp[j]; j++) if ('0' == tmp[j]) tmp[j] = '.';
+@@ -3099,70 +3099,70 @@
+             MKCOL("");
+          }
+             break;
+-         case P_FLT:
++         case EU_FLT:
+             MKCOL(scale_num(p->maj_flt, w, s));
+             break;
+-         case P_GRP:
++         case EU_GRP:
+             MKCOL(p->egroup);
+             break;
+-         case P_MEM:
++         case EU_MEM:
+             MKCOL((float)PAGES_TO_KB(p->resident) * 100 / kb_main_total);
+             break;
+-         case P_NCE:
++         case EU_NCE:
+             MKCOL((int)p->nice);
+             break;
+-         case P_PID:
++         case EU_PID:
+             MKCOL((unsigned)p->XXXID);
+             break;
+-         case P_PPD:
++         case EU_PPD:
+             MKCOL((unsigned)p->ppid);
+             break;
+-         case P_PRI:
++         case EU_PRI:
+             if (unlikely(-99 > p->priority) || unlikely(999 < p->priority)) {
+                f = "  RT";
+                MKCOL("");
+             } else
+                MKCOL((int)p->priority);
+             break;
+-         case P_RES:
++         case EU_RES:
+             MKCOL(scale_num(PAGES_TO_KB(p->resident), w, s));
+             break;
+-         case P_SHR:
++         case EU_SHR:
+             MKCOL(scale_num(PAGES_TO_KB(p->share), w, s));
+             break;
+-         case P_STA:
++         case EU_STA:
+             MKCOL(p->state);
+             break;
+-         case P_SWP:
++         case EU_SWP:
+             MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident), w, s));
+             break;
+-         case P_TME:
+-         case P_TM2:
++         case EU_TME:
++         case EU_TM2:
+          {  TIC_t t = p->utime + p->stime;
+             if (CHKw(q, Show_CTIMES))
+                t += (p->cutime + p->cstime);
+             MKCOL(scale_tics(t, w));
+          }
+             break;
+-         case P_TTY:
++         case EU_TTY:
+          {  char tmp[TNYBUFSIZ];
+             dev_to_tty(tmp, (int)w, p->tty, p->XXXID, ABBREV_DEV);
+             MKCOL(tmp);
+          }
+             break;
+-         case P_UID:
++         case EU_UID:
+             MKCOL((unsigned)p->euid);
+             break;
+-         case P_URE:
++         case EU_URE:
+             MKCOL(p->euser);
+             break;
+-         case P_URR:
++         case EU_URR:
+             MKCOL(p->ruser);
+             break;
+-         case P_VRT:
++         case EU_VRT:
+             MKCOL(scale_num(PAGES_TO_KB(p->size), w, s));
+             break;
+-         case P_WCH:
++         case EU_WCH:
+             if (No_ksyms) {
+                f = " %08lx ";
+                MKCOL((long)p->wchan);
+diff -Naur a/top.h b/top.h
+--- a/top.h	2006-06-24 23:41:48.000000000 -0700
++++ b/top.h	2014-09-04 13:14:40.124239420 -0700
+@@ -245,12 +245,12 @@
+ 
+ // Flags for each possible field
+ enum pflag {
+-   P_PID, P_PPD, P_URR, P_UID, P_URE, P_GRP, P_TTY,
+-   P_PRI, P_NCE,
+-   P_CPN, P_CPU, P_TME, P_TM2,
+-   P_MEM, P_VRT, P_SWP, P_RES, P_COD, P_DAT, P_SHR,
+-   P_FLT, P_DRT,
+-   P_STA, P_CMD, P_WCH, P_FLG
++   EU_PID, EU_PPD, EU_URR, EU_UID, EU_URE, EU_GRP, EU_TTY,
++   EU_PRI, EU_NCE,
++   EU_CPN, EU_CPU, EU_TME, EU_TM2,
++   EU_MEM, EU_VRT, EU_SWP, EU_RES, EU_COD, EU_DAT, EU_SHR,
++   EU_FLT, EU_DRT,
++   EU_STA, EU_CMD, EU_WCH, EU_FLG
+ };
+ 
+ 
+@@ -362,16 +362,16 @@
+ // The default values for the local config file
+ #define DEF_RCFILE { \
+    0, 1, DEF_DELAY, 0, { \
+-   { P_CPU, DEF_WINFLGS, 0, \
++   { EU_CPU, DEF_WINFLGS, 0, \
+       COLOR_RED, COLOR_RED, COLOR_YELLOW, COLOR_RED, \
+       "Def", DEF_FIELDS }, \
+-   { P_PID, DEF_WINFLGS, 0, \
++   { EU_PID, DEF_WINFLGS, 0, \
+       COLOR_CYAN, COLOR_CYAN, COLOR_WHITE, COLOR_CYAN, \
+       "Job", JOB_FIELDS }, \
+-   { P_MEM, DEF_WINFLGS, 0, \
++   { EU_MEM, DEF_WINFLGS, 0, \
+       COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLUE, COLOR_MAGENTA, \
+       "Mem", MEM_FIELDS }, \
+-   { P_URE, DEF_WINFLGS, 0, \
++   { EU_URE, DEF_WINFLGS, 0, \
+       COLOR_YELLOW, COLOR_YELLOW, COLOR_GREEN, COLOR_YELLOW, \
+       "Usr", USR_FIELDS } \
+    } }
diff --git a/procps.patches/procps-52.description b/procps.patches/procps-52.description
new file mode 100644
index 0000000..309973e
--- /dev/null
+++ b/procps.patches/procps-52.description
@@ -0,0 +1 @@
+This patch suppress a warning which is caused by a software bug. We should try to fix the bug after F1 build.
diff --git a/procps.patches/procps-52.patch b/procps.patches/procps-52.patch
new file mode 100644
index 0000000..98aa386
--- /dev/null
+++ b/procps.patches/procps-52.patch
@@ -0,0 +1,14 @@
+diff -aruN a/proc/sysinfo.c b/proc/sysinfo.c
+--- a/proc/sysinfo.c	2008-03-24 12:33:43.000000000 +0800
++++ b/proc/sysinfo.c	2014-11-12 17:25:46.302687988 +0800
+@@ -169,7 +169,9 @@
+     /* If 32-bit or big-endian (not Alpha or ia64), assume HZ is 100. */
+     Hertz = (sizeof(long)==sizeof(int) || htons(999)==999) ? 100UL : 1024UL;
+ #endif
+-    fprintf(stderr, "Unknown HZ value! (%d) Assume %Ld.\n", h, Hertz);
++    // There's a bug that causes this warning. We just comment it out
++    // for F1 build.
++    //fprintf(stderr, "Unknown HZ value! (%d) Assume %Ld.\n", h, Hertz);
+   }
+ }
+ 
diff --git a/procps.patches/procps-53.description b/procps.patches/procps-53.description
new file mode 100644
index 0000000..684a38e
--- /dev/null
+++ b/procps.patches/procps-53.description
@@ -0,0 +1,2 @@
+Fix for build error when using make 4.1.
+http://lists.gnu.org/archive/html/ltib/2011-06/msg00043.html
diff --git a/procps.patches/procps-53.patch b/procps.patches/procps-53.patch
new file mode 100644
index 0000000..b2b743a
--- /dev/null
+++ b/procps.patches/procps-53.patch
@@ -0,0 +1,12 @@
+diff -Naur a/Makefile b/Makefile
+--- a/Makefile	2015-03-07 10:58:01.112684003 -0800
++++ b/Makefile	2015-03-07 10:59:07.093374104 -0800
+@@ -174,7 +174,7 @@
+ # want this rule first, use := on ALL, and ALL not filled in yet
+ all: do_all
+ 
+--include */module.mk
++-include proc/module.mk ps/module.mk
+ 
+ do_all:    $(ALL)
+ 
diff --git a/procps.tar.gz b/procps.tar.gz
new file mode 100644
index 0000000..18db26d
--- /dev/null
+++ b/procps.tar.gz
Binary files differ
diff --git a/procps.url b/procps.url
new file mode 100644
index 0000000..080480f
--- /dev/null
+++ b/procps.url
@@ -0,0 +1 @@
+http://procps.sourceforge.net/procps-3.2.8.tar.gz
diff --git a/procps.version b/procps.version
new file mode 100644
index 0000000..f092941
--- /dev/null
+++ b/procps.version
@@ -0,0 +1 @@
+3.2.8
