Doesn't pretty much everything call into libc to open() things rather than invoke the syscall directly?
You might even have several libc's in your system. You might have a uClibc + Busybox based initrd and a full glibc based root system.
Btw. how does LD_PRELOAD act together static binaries?
So an app calls the open() function. This results in an unresolved symbol which the run-time linker matches up with the open() exported by glibc. glibc then does the open() syscall.
If libc implements it, then it is by definition in section 3.
EDIT: (signing out of this sub-thread)
Have you ever called a system call by hand using assembly?
Have you ever looked at glibc's source?
Habe you ever looked at the kernel's close() syscall?