xref: /freebsd/usr.sbin/kldxref/fileformat (revision 16c6e0979cb363d299edf52fde068dd7e287025c)
19c6f9240SPeter Wemm$FreeBSD$
29c6f9240SPeter Wemm
316c6e097SLuigi Rizzolinker.hints file consists from the one or more records,
416c6e097SLuigi Rizzoand is processed by sys/kern/kern_linker.c::linker_hints_lookup()
516c6e097SLuigi Rizzo
616c6e097SLuigi RizzoFirst record of file is special and determines its version:
79c6f9240SPeter Wemm
89c6f9240SPeter Wemmint	version;
99c6f9240SPeter Wemm
109c6f9240SPeter Wemm    All subsequent records have following format:
119c6f9240SPeter Wemm
129c6f9240SPeter Wemmstruct record {
139c6f9240SPeter Wemm	int	length;		/* length of following data */
149c6f9240SPeter Wemm	char	data[length];
159c6f9240SPeter Wemm};
169c6f9240SPeter Wemm
179c6f9240SPeter Wemm    Each record is aligned on sizeof(int) boundary. First integer of the field
189c6f9240SPeter Wemm'data' determines its type:
199c6f9240SPeter Wemm
209c6f9240SPeter Wemmstruct data {
2116c6e097SLuigi Rizzo	int	type;		/* type of data. currently MDT_* values */
229c6f9240SPeter Wemm};
239c6f9240SPeter Wemm
249c6f9240SPeter Wemm    The rest of record depends on the type.
259c6f9240SPeter Wemm
269c6f9240SPeter Wemmstruct string {
2716c6e097SLuigi Rizzo	uint8_t	length;		/* length of string */
289c6f9240SPeter Wemm	char	val[];		/* string itself (no terminating zero) */
299c6f9240SPeter Wemm};
309c6f9240SPeter Wemm
319c6f9240SPeter Wemmstruct data_mdt_version {
329c6f9240SPeter Wemm	int	type = MDT_VERSION;
339c6f9240SPeter Wemm	struct string	modname;
3416c6e097SLuigi Rizzo	/* padding */
359c6f9240SPeter Wemm	int	version;
369c6f9240SPeter Wemm	struct string	kldname;
3716c6e097SLuigi Rizzo	/* padding */
389c6f9240SPeter Wemm};
399c6f9240SPeter Wemm
409c6f9240SPeter Wemmstruct data_mdt_module {
4116c6e097SLuigi Rizzo	int	type = MDT_MODULE;
429c6f9240SPeter Wemm	struct string	modname;
439c6f9240SPeter Wemm	struct string	kldname;
4416c6e097SLuigi Rizzo	/* padding */
459c6f9240SPeter Wemm};
46