I'm working on a C++11 embedded Linux application. We currently use gcc-6.3.
What modifications would it take (and to what parts), so record all arguments passed into our C++ functions, and also their return values?
Modifying gcc is an option if that's the only way.
You might consider extending GCC with a plugin (or some extension in MELT).
This is not a trivial task (could take weeks or more probably months of work), you'll need to understand the organization of passes and the GIMPLE representation. Look at some slides in http://gcc-melt.org/docum.html
You could annotate your functions to be traced with your own specific custom attribute (read about function attributes) then add your custom optimization pass modifying the GIMPLE around calls to these functions. You'll probably want to insert a call to some logging function before and after such calls.
(I recommend to make your plugin free software, you might get help about it; be aware of the GCC runtime library exception)