A Signal Named SIGSEGV: Where Did the “V” Come From?

Every C programmer eventually meets SIGSEGV. You compile, run, and the terminal prints “Segmentation Fault.” Most people shrug and fix the pointer bug. But one detail nags: why SIGSEGV? If it’s a segmentation fault, shouldn’t the signal be called SIGSEGF?

As it turns out, the name has a history that splits between user space and the kernel — and the “V” wasn’t always there.

From Segments to Page Faults

The concept comes from older hardware that used memory segmentation. Each segment had a defined length (the segment limit), and accessing beyond that limit triggered a processor fault. Modern systems that use paging borrowed the idea. When a program touches memory it isn’t allowed to, the CPU raises an invalid page fault, which the operating system reports to the process as SIGSEGV.

That much explains the “segmentation” part. The “violation” part makes sense too — you violated the rules of the segment. But the historical record shows the signal wasn’t always spelled that way.

The Original Name: SIGSEG

Look at the Version 6 UNIX documentation for signal() from around 1978, and you won’t find SIGSEGV. Signal number 11 is called SIGSEG — no “V” at all.

The user-space header file /usr/include/signal.h appears in the Research V7 tree, and it already uses SIGSEGV. However, the kernel code in the same version still referred to the signal as SIGSEG. The kernel side was only renamed to SIGSEGV later, in BSD-4, around 1980.

The PDP-11 trap vector, however, used the wording “segmentation violation” as far back as Research V4 — the earliest version with surviving source code. That trap was converted into a SIGSEG signal in trap.c.

A Split That Persisted

So the story is one of parallel naming. The userspace parts of UNIX switched to SIGSEGV fairly early — by V7. The kernel internals lagged behind, holding onto SIGSEG until BSD-4 finally aligned them.

The takeaway? In the beginning the signal was called SIGSEG, and it was renamed SIGSEGV in user space first, then in the kernel. And no, there was never a “segmentation vault” — just a violation of segment rules, reported to your process as a crash.