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