{section: Build the Full Port}
 
-This was mostly just finding the =GLIBC219= checks and adding =GLIBC224= to them.  One exception was =wait4()=; not sure if this is a glibc change or the compiler getting pickier, but apparently wait4()'s third argument really needs to be an =int *= rather than a =void *=.  Updated the remap to match the new declaration.
+This was mostly just finding the =GLIBC219= checks and adding =GLIBC224= to them.  One exception was =wait4()=; not sure if this is a glibc change or the compiler getting pickier, but apparently wait4()'s third argument really needs to be a pointer to =int= rather than a pointer to =void=.  Updated the remap to match the new declaration.
 
-Next up: testing.
+{subsection: Testing}
+
+The tests did not link.  The first problem was that we had to explicit for everything in the standard universe, including the tests, that we were building static libraries (e.g., add =-static= to the flags everywhere).
+
+The second was a problem with some symbols, including =__libc_memalign=, being multiply-defined.  The last time this happened, the problem was user code calling =memalign= and causing it to link against the glibc versions in =libcondor_c.a=, rather than against the versions in =libcondorsyscall.a=.  The problem was not in user code this time, and I wasn't able to isolate what else might have been calling it.  Instead, I massaged =malloc.o= to make its symbols harder to link against (localized them) except for a few that were needed by =libcondorsyscall.a= that, as they were glibc-internal, should not have be necessary.  It seems like maybe there's some premature linking going on in general with the new toolchain, but =-fno-lto= didn't seem to solve the problem.  (Maybe something needs to be changed about the libraries are being built?)
+
+The workaround resulted in a BaTLab test run with only two test failures.  I haven't looked at the second one in any detail.  The first one the first test's problem is as follows: unlike previous glibc implementations, version 2.24 does not have the *nocancel() family of functions; it instead has a set of =#defines= like the following:
+
+{verbatim}
+#define __close_nocancel(fd) \
+  INLINE_SYSCALL (close, 1, fd)
+{endverbatim}
+
+which emits assembly which includes the syscall instruction.  This means we
+can't intercept, for instance, the close() that you would expect to be
+called by fclose().
+
+Work was paused there pending further demand.