Eh, nl_catd is declared in <nl_types.h>, which is included right
before that declaration.
You're fooled by the fact that GCC generates incomplete debug
information. GDB managed to stop inside the function prologue and at
that point the stack slot that is going to hold the local copy of the
catd argument isn't filled yet. If you step (2 times) to get out of
the prologue and into the body of the function, you'll see that the
catd value is the same after all.
Cheers,
Mark