Files
zig/lib/libc/include/generic-freebsd/sys/ucoredump.h
T
2025-12-07 09:32:28 +01:00

99 lines
2.6 KiB
C
Vendored

/*
*
* Copyright (c) 2015 Mark Johnston <markj@FreeBSD.org>
* Copyright (c) 2025 Kyle Evans <kevans@FreeBSD.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*
*/
#ifndef _SYS_UCOREDUMP_H_
#define _SYS_UCOREDUMP_H_
#ifdef _KERNEL
#include <sys/_uio.h>
#include <sys/blockcount.h>
#include <sys/queue.h>
/* Coredump output parameters. */
struct coredump_params;
struct coredump_writer;
struct thread;
struct ucred;
typedef int coredump_init_fn(const struct coredump_writer *,
const struct coredump_params *);
typedef int coredump_write_fn(const struct coredump_writer *, const void *, size_t,
off_t, enum uio_seg, struct ucred *, size_t *, struct thread *);
typedef int coredump_extend_fn(const struct coredump_writer *, off_t,
struct ucred *);
struct coredump_vnode_ctx {
struct vnode *vp;
struct ucred *fcred;
};
coredump_write_fn core_vn_write;
coredump_extend_fn core_vn_extend;
struct coredump_writer {
void *ctx;
coredump_init_fn *init_fn;
coredump_write_fn *write_fn;
coredump_extend_fn *extend_fn;
};
struct coredump_params {
off_t offset;
struct ucred *active_cred;
struct thread *td;
const struct coredump_writer *cdw;
struct compressor *comp;
};
#define CORE_BUF_SIZE (16 * 1024)
int core_write(struct coredump_params *, const void *, size_t, off_t,
enum uio_seg, size_t *);
int core_output(char *, size_t, off_t, struct coredump_params *, void *);
int sbuf_drain_core_output(void *, const char *, int);
extern int coredump_pack_fileinfo;
extern int coredump_pack_vmmapinfo;
extern int compress_user_cores;
extern int compress_user_cores_level;
typedef int coredumper_probe_fn(struct thread *);
/*
* Some arbitrary values for coredumper probes to return. The highest priority
* we can find wins. It's somewhat expected that a coredumper may want to bid
* differently based on the process in question. Note that probe functions will
* be called with the proc lock held, so they must not sleep.
*/
#define COREDUMPER_NOMATCH (-1) /* Decline to touch it */
#define COREDUMPER_GENERIC (0) /* I handle coredumps */
#define COREDUMPER_SPECIAL (50) /* Special handler */
#define COREDUMPER_HIGH_PRIORITY (100) /* High-priority handler */
/*
* The handle functions will be called with the proc lock held, and should
* return with the proc lock dropped.
*/
typedef int coredumper_handle_fn(struct thread *, off_t);
struct coredumper {
SLIST_ENTRY(coredumper) cd_entry;
const char *cd_name;
coredumper_probe_fn *cd_probe;
coredumper_handle_fn *cd_handle;
blockcount_t cd_refcount;
};
void coredumper_register(struct coredumper *);
void coredumper_unregister(struct coredumper *);
#endif /* _KERNEL */
#endif /* _SYS_UCOREDUMP_H_ */