arch/sh/kernel/vsyscall/vsyscall.c
Source file repositories/reference/linux-study-clean/arch/sh/kernel/vsyscall/vsyscall.c
File Facts
- System
- Linux kernel
- Corpus path
arch/sh/kernel/vsyscall/vsyscall.c- Extension
.c- Size
- 2724 bytes
- Lines
- 123
- Domain
- Architecture Layer
- Bucket
- arch/sh
- Inferred role
- Architecture Layer: syscall or user/kernel boundary
- Status
- core implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or participates in a user/kernel boundary; inspect argument validation, copy_from_user/copy_to_user, credentials, and dispatch target.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/mm.hlinux/kernel.hlinux/init.hlinux/gfp.hlinux/module.hlinux/elf.hlinux/sched.hlinux/sysctl.hlinux/err.h
Detected Declarations
function vdso_setupfunction vsyscall_initfunction vm_sysctl_initfunction arch_setup_additional_pagesmodule init vm_sysctl_initexport vdso_enabled
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* arch/sh/kernel/vsyscall/vsyscall.c
*
* Copyright (C) 2006 Paul Mundt
*
* vDSO randomization
* Copyright(C) 2005-2006, Red Hat, Inc., Ingo Molnar
*/
#include <linux/mm.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/gfp.h>
#include <linux/module.h>
#include <linux/elf.h>
#include <linux/sched.h>
#include <linux/sysctl.h>
#include <linux/err.h>
/*
* Should the kernel map a VDSO page into processes and pass its
* address down to glibc upon exec()?
*/
unsigned int __read_mostly vdso_enabled = 1;
EXPORT_SYMBOL_GPL(vdso_enabled);
static int __init vdso_setup(char *s)
{
vdso_enabled = simple_strtoul(s, NULL, 0);
return 1;
}
__setup("vdso=", vdso_setup);
static const struct ctl_table vdso_table[] = {
{
.procname = "vdso_enabled",
.data = &vdso_enabled,
.maxlen = sizeof(vdso_enabled),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_ONE,
},
};
/*
* These symbols are defined by vsyscall.o to mark the bounds
* of the ELF DSO images included therein.
*/
extern const char vsyscall_trapa_start, vsyscall_trapa_end;
static struct page *syscall_pages[1];
static struct vm_special_mapping vdso_mapping = {
.name = "[vdso]",
.pages = syscall_pages,
};
int __init vsyscall_init(void)
{
void *syscall_page = (void *)get_zeroed_page(GFP_ATOMIC);
syscall_pages[0] = virt_to_page(syscall_page);
/*
* XXX: Map this page to a fixmap entry if we get around
* to adding the page to ELF core dumps
*/
memcpy(syscall_page,
&vsyscall_trapa_start,
&vsyscall_trapa_end - &vsyscall_trapa_start);
return 0;
}
static int __init vm_sysctl_init(void)
{
register_sysctl_init("vm", vdso_table);
return 0;
}
fs_initcall(vm_sysctl_init);
/* Setup a VMA at program startup for the vsyscall page */
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
unsigned long addr;
int ret;
if (mmap_write_lock_killable(mm))
Annotation
- Immediate include surface: `linux/mm.h`, `linux/kernel.h`, `linux/init.h`, `linux/gfp.h`, `linux/module.h`, `linux/elf.h`, `linux/sched.h`, `linux/sysctl.h`.
- Detected declarations: `function vdso_setup`, `function vsyscall_init`, `function vm_sysctl_init`, `function arch_setup_additional_pages`, `module init vm_sysctl_init`, `export vdso_enabled`.
- Atlas domain: Architecture Layer / arch/sh.
- Implementation status: core implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.