[kernel] Expose a sysconf page to userspace

A structure, system_config, which is dynamically defined by the
definitions/sysconf.yaml config, is now mapped into every user address
space. The kernel fills this with information about itself and the
running machine.

User programs access this through the new j6_sysconf fake syscall in
libj6.

See: Github bug #242
See: [frobozz blog post](https://jsix.dev/posts/frobozz/)

Tags:
This commit is contained in:
Justin C. Miller
2022-01-13 22:08:35 -08:00
parent 939022bb5e
commit b3aaddadc8
11 changed files with 250 additions and 0 deletions

28
src/kernel/sysconf.h.cog Normal file
View File

@@ -0,0 +1,28 @@
#pragma once
// vim: ft=cpp
/// \file sysconf.h
/// Kernel-side implementation of sysconf struct
/*[[[cog code generation
from os.path import join
from sysconf import Sysconf
sc = Sysconf(join(definitions_path, "sysconf.yaml"))
cog.outl(f"constexpr uintptr_t sysconf_user_address = {sc.address:#x};")
]]]*/
///[[[end]]]
struct system_config
{
/*[[[cog code generation
for var in sc.vars:
cog.outl(f"{var.type:10} {var.section}_{var.name};")
]]]*/
///[[[end]]]
};
extern system_config *g_sysconf;
extern uintptr_t g_sysconf_phys;
void sysconf_create();