The files in this directory are a collection of recordings of
the memory allocations of a set of apps.

In order to run these files through the tool, they will need to be placed
unzipped on the device.

Format of dumps:

<tid>: <action_name> <ptr> [<optional_arguments>]

<tid>
  The pid_t value that is the gettid() value recorded during the run.

<action_name>
  One of:
    malloc - Allocate memory using the malloc function.
    calloc - Allocate memory using the calloc function.
    memalign - Allocate memory using the memalign function. This is used
               during recording for either memalign or posix_memalign.
    realloc - Allocate memory using the realloc function.
    free - Free memory allocated using one of the above actions.
    thread_done - Terminate the thread with the given tid.

Format of each action:

<tid>: malloc <ptr> <size>
 Allocation made by malloc(<size>).  <ptr> is the value returned by malloc.

Example:

100: malloc 0xb48390a0 48

<tid>: calloc <ptr> <nmemb> <size>
  Allocation made by calloc(<nmemb>, <size>. <ptr> is the value returned
  by calloc.

Example:

200: calloc 0xb48c1100 32 8

<tid>:realloc <new_ptr> <old_ptr> <size>
  Allocation made by realloc(<old_ptr>, <size>). <old_ptr> can be 0x0
  to indicate a realloc with a nullptr. <new_ptr> is the value returned
  by realloc.

Example:

300: realloc 0x96b90920 0x93605280 150

<tid>:memalign <ptr> <alignment> <size>
  Allocation made by memalign(<alignment>, <size>). <ptr> is the value
  returned by memalign.

Example:

400: memalign 0xae42d080 16 104

<tid>: free <ptr>
  Find a previously allocated pointer <ptr> and call free(<ptr>).
  <ptr> can be 0x0 to indicate the freeing of a nullptr.

Example:

500: free 0xb4827400

<tid>: thread_done 0x0
  Indicates that the thread <tid> has completed.

Example:

600: thread_done 0x0
