I notice the loop construction you chose will put one word per line instead of two. So the assignments inside the loop will not be performed corrrectly. Perhaps this will give a better result (not tested)?
egrep -o "(0x[0-9a-fA-F]+)\s[0-9]+\.[0-9]+" ./syntax_check_out.txt|
while read addr stamp; do
echo "$(addr2line -f -e ../mzscheme3m $addr | head -1) $stamp"
done
addr2line works fine if I invoke it directly in the shell for any given function address. The binary I'm inspecting is a program I wrote and compiled, and it's fully debuggable.
Good... Alternatively the solution that lakris suggested should work too if the format of the file is truly as you described (i.e. [function address in hex notation] [timestamp when it was invoked] ) . Then you should not even need a grep filter nor a pipe..