You should check if your distribution is using the vanilla GLIBC or the EGLIBC fork (Debian and Ubuntu have switched to EGLIBC EDIT: they switched back around 2014).
Anyway, the repository browser for GLIBC is at http://sourceware.org/git/?p=glibc.git
http://code.woboq.org/userspace/glibc/, posted by @guruz below, is a good alternative.
The source is a bit complicated by the presence of multiple versions of the same files.
Answer from Jacopo on Stack Overflowdocumentation - Where can I browse the sourcecode for libc online (like doxygen) - Stack Overflow
c - libc source location - for download or online viewing? - Stack Overflow
linux - Where is the source code for the GNU C library? - Stack Overflow
c - How to navigate glibc source? - Stack Overflow
Videos
You should check if your distribution is using the vanilla GLIBC or the EGLIBC fork (Debian and Ubuntu have switched to EGLIBC EDIT: they switched back around 2014).
Anyway, the repository browser for GLIBC is at http://sourceware.org/git/?p=glibc.git
http://code.woboq.org/userspace/glibc/, posted by @guruz below, is a good alternative.
The source is a bit complicated by the presence of multiple versions of the same files.
How about this for libc documentation? And perhaps this for the kernel? There is also Google Code search; here is an example search.
More on Google Code Search You can enter search queries like this: package:linux-2.6 malloc for any references to malloc in the linux-2.6 kernel.
Edit: Google Code search is now shut down. But you can access the git repo at http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git and it has search as well.
Most linuxes use a libc version named glibc.
The LXR (online cross-reference system) for glibc is e.g. here http://koala.cs.pub.ro/lxr/glibc/ for 2.9 version (link is broken). I must say that something may be not lxr'ed because some sources are generated in the build process, for example - as i can remember - wrappers around a system calls.
Pthreads are in nptl/ folder. Right link to libc sources is http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.bz2 (or change 2.14 to your version)
Update: After closing of koala's lxr, there are:
Metager with glibc: http://code.metager.de/source/xref/gnu/glibc/(Served with Sun's OpenGrok, which was originally used to generate online x-ref for Solaris/OpenSolaris)Google code search (I know that it was closed; but I also know it's other version which is up):
http://code.google.com/codesearch and try to search something glibc-specific
UPD (march 2013) They killed codesearch again:
404. That’s an error.The requested URL /codesearch was not found on this server. That’s all we know.
UPD 2017
Metager with glibc: http://code.metager.de/source/xref/gnu/glibc/There is online git by glibc authors: https://sourceware.org/git/?p=glibc.git (tree is browserable at https://sourceware.org/git/?p=glibc.git;a=tree)
Glibc git is mirrored to github (which has some searching functions) https://github.com/bminor/glibc Buildroot 2018.05 notably uses this mirror.
There is search like google's codesearch in all debian packages: https://codesearch.debian.net/. It can search in glibc sources by "package:glibc request" request and also have file browser: http://sources.debian.net/src/glibc/
Info on the glibc repository: http://sourceware.org/glibc/wiki/GlibcGit
Clone it to get your own copy and search it however you like:
git clone git://sourceware.org/git/glibc.git
I load it up in an IDE project (using whatever preferred IDE) and the code navigation works quite well to let me find what I'm interested in.
Browse the source online http://sourceware.org/git/?p=glibc.git
The simplest way is to extract the package source code somewhere: go to an appropriate directory, then run
apt source glibc
In gdb, add the corresponding directory to the source path by using the directory command.
You may also want the detached debug symbols; I don’t know whether Devuan provides debug symbol packages in general (dbgsym packages), but I see it ships libc6-dbg which has the same purpose:
sudo apt install libc6-dbg
Here’s an example gdb session:
$ gdb ls
...
(gdb) directory ~/Debian/glibc
Source directories searched: /home/steve/Debian/glibc:$cdir:$cwd
(gdb) break malloc
Breakpoint 1 at 0x46c8
(gdb) run
Starting program: /bin/ls
Breakpoint 1, malloc (n=1441) at dl-minimal.c:50
50 if (alloc_end == 0)
Some further indications for Ubuntu 22.04 beyond what Stephen said.
To get debug symbols and source, some setup is needed as in:
# Get debug symbols.
printf "deb http://ddebs.ubuntu.com %s main restricted universe multiverse\n" $(lsb_release -cs){,-updates,-security,-proposed} | \
sudo tee -a /etc/apt/sources.list.d/ddebs.list
sudo apt install ubuntu-dbgsym-keyring
sudo apt update
sudo apt install coreutils-dbgsym
# Get source as per: https://askubuntu.com/questions/496549/error-you-must-put-some-source-uris-in-your-sources-list
# Produces directory "coreutils-8.32"
sudo cp /etc/apt/sources.list /etc/apt/sources.list~
sudo sed -Ei 's/^# deb-src /deb-src /'
/etc/apt/sources.list sudo apt-get update
apt source coreutils
Then, to get GDB to actually find the sources, you might need to either cd into the downloaded source, or play with stuff like:
set substitute-path . glibc-2.35
as mentioned at: https://askubuntu.com/questions/487222/how-to-install-debug-symbols-for-installed-packages/1434174#1434174
Out of curiosity, I really want to dig into the source code implementation of various C features like how is int, function, switch, ... implemented by C. Can you help me get started and point to where the actual source code is located so I can try to understand it?
Also, I want to know if the functions defined by the header files like math.h, stdio.h, ... are actually implemented by C or are they implemented by the compiler (gcc/clang). And where to locate the source code of these? (like where to find source code of qsort for example)
Are there any resources for learning about the internals of the language at this depth (other than the actual source code)?
And, it would really help me if you can expand the answer for the above questions to C++ also. For example, in C++ string contains the actual character array and the length of the array. But where to find the source code of string to see all the things that string does internally.