arch/arm64/kernel/elfcore.c
Source file repositories/reference/linux-study-clean/arch/arm64/kernel/elfcore.c
File Facts
- System
- Linux kernel
- Corpus path
arch/arm64/kernel/elfcore.c- Extension
.c- Size
- 2935 bytes
- Lines
- 140
- Domain
- Architecture Layer
- Bucket
- arch/arm64
- Inferred role
- Architecture Layer: implementation source
- Status
- source 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 uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/coredump.hlinux/elfcore.hlinux/kernel.hlinux/mm.hasm/cpufeature.hasm/mte.h
Detected Declarations
function mte_dump_tag_rangefunction get_dump_pagefunction elf_core_extra_phdrsfunction elf_core_write_extra_phdrsfunction for_each_mte_vmafunction elf_core_extra_data_sizefunction elf_core_write_extra_datafunction for_each_mte_vma
Annotated Snippet
if (!page) {
dump_skip(cprm, MTE_PAGE_TAG_STORAGE);
continue;
}
/*
* Pages mapped in user space as !pte_access_permitted() (e.g.
* PROT_EXEC only) may not have the PG_mte_tagged flag set.
*/
if (!page_mte_tagged(page)) {
put_page(page);
dump_skip(cprm, MTE_PAGE_TAG_STORAGE);
continue;
}
if (!tags) {
tags = mte_allocate_tag_storage();
if (!tags) {
put_page(page);
ret = 0;
break;
}
}
mte_save_page_tags(page_address(page), tags);
put_page(page);
if (!dump_emit(cprm, tags, MTE_PAGE_TAG_STORAGE)) {
ret = 0;
break;
}
}
if (tags)
mte_free_tag_storage(tags);
return ret;
}
Elf_Half elf_core_extra_phdrs(struct coredump_params *cprm)
{
int i;
struct core_vma_metadata *m;
int vma_count = 0;
for_each_mte_vma(cprm, i, m)
vma_count++;
return vma_count;
}
int elf_core_write_extra_phdrs(struct coredump_params *cprm, loff_t offset)
{
int i;
struct core_vma_metadata *m;
for_each_mte_vma(cprm, i, m) {
struct elf_phdr phdr;
phdr.p_type = PT_AARCH64_MEMTAG_MTE;
phdr.p_offset = offset;
phdr.p_vaddr = m->start;
phdr.p_paddr = 0;
phdr.p_filesz = mte_vma_tag_dump_size(m);
phdr.p_memsz = m->end - m->start;
offset += phdr.p_filesz;
phdr.p_flags = 0;
phdr.p_align = 0;
if (!dump_emit(cprm, &phdr, sizeof(phdr)))
return 0;
}
return 1;
}
size_t elf_core_extra_data_size(struct coredump_params *cprm)
{
int i;
struct core_vma_metadata *m;
size_t data_size = 0;
for_each_mte_vma(cprm, i, m)
data_size += mte_vma_tag_dump_size(m);
return data_size;
}
int elf_core_write_extra_data(struct coredump_params *cprm)
{
int i;
Annotation
- Immediate include surface: `linux/coredump.h`, `linux/elfcore.h`, `linux/kernel.h`, `linux/mm.h`, `asm/cpufeature.h`, `asm/mte.h`.
- Detected declarations: `function mte_dump_tag_range`, `function get_dump_page`, `function elf_core_extra_phdrs`, `function elf_core_write_extra_phdrs`, `function for_each_mte_vma`, `function elf_core_extra_data_size`, `function elf_core_write_extra_data`, `function for_each_mte_vma`.
- Atlas domain: Architecture Layer / arch/arm64.
- Implementation status: source 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.