kmoddeps.mac revision b96402a7553427abbf7d3158d9e5df57e222f858
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; $Id$
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;; @file
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; Assembly macros for generating Solaris kernel module dependencies
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;
c498d9365aa68b789215f4f356a9935f70b0fb3bmb
c498d9365aa68b789215f4f356a9935f70b0fb3bmb;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; Copyright (C) 2012 Oracle Corporation
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; This file is part of VirtualBox Open Source Edition (OSE), as
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; available from http://www.virtualbox.org. This file is free software;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; you can redistribute it and/or modify it under the terms of the GNU
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; General Public License (GPL) as published by the Free Software
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; Foundation, in version 2 as it comes in the "COPYING" file of the
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; The contents of this file may alternatively be used under the terms
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; of the Common Development and Distribution License Version 1.0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; VirtualBox OSE distribution, in which case the provisions of the
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; CDDL are applicable instead of those of the GPL.
c498d9365aa68b789215f4f356a9935f70b0fb3bmb;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; You may elect to license modified versions of this file under the
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; terms and conditions of either the GPL or the CDDL or both.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; Solaris kernel modules use non-standard ELF constructions to express inter-
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; module dependencies, namely a DT_NEEDED tag inside a relocatable ELF file.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; The Solaris linker can generate these automatically; since yasm can't
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; produce an ELF file which quite fits Solaris's requirements we create one
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; manually using flat binary output format. In order to save unnecessary
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; repetition, this file defines macros for the repetitive bits which can be
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; reused by the actual dependency objects. Certainly not the nicest way to
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; get the effect we want, but probably a reasonable compromise between
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; cleanness and required effort.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%ifdef RT_ARCH_AMD64
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaBITS 64
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; Native word size
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%define DNAT dq
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; ELF machine number for the current architecture.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%define EM_CUR 62 ; EM_X86_64
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; ELF header class for the current architecture.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%define CLASS 2
7aec1d6e253b21f9e9b7ef68b4d81ab9859b51fecindi
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%else
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaBITS 32
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%define DNAT dd
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%define EM_CUR 3 ; EM_386
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%define CLASS 1
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
7aec1d6e253b21f9e9b7ef68b4d81ab9859b51fecindi%endif
7aec1d6e253b21f9e9b7ef68b4d81ab9859b51fecindi
7aec1d6e253b21f9e9b7ef68b4d81ab9859b51fecindi;;
7aec1d6e253b21f9e9b7ef68b4d81ab9859b51fecindi; ELF file header, section tables and shared string table for the dependency
7aec1d6e253b21f9e9b7ef68b4d81ab9859b51fecindi; object.
7aec1d6e253b21f9e9b7ef68b4d81ab9859b51fecindi%macro kmoddeps_header 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaelf_hdr: ; elfxx_hdr structure
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga db 7fh, "ELF" ; e_ident
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga db CLASS, 1, 1 ; e_ident
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga times 9 db 0 ; padding
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw 1 ; e_type ET_REL
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw EM_CUR ; e_machine
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 1 ; e_version EV_CURRENT
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; e_entry
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; e_phoff
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT sect_hdr - $$ ; e_shoff
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 0 ; e_flags
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw elf_hsize ; e_ehsize
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw 0 ; e_phentsize
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw 0 ; e_phnum
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw sect_hsize ; e_shentsize
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw 4 ; e_shnum
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dw 1 ; e_shstrndx section .shstrtab
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagaelf_hsize equ $ - elf_hdr
c498d9365aa68b789215f4f356a9935f70b0fb3bmb
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagasect_hdr: ; elfxx_shdr structure
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga times sect_hsize db 0 ; undefined section
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagasect_hdr1:
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd str_shstrtab ; sh_name .shstrtab
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 3 ; sh_type SHT_STRTAB
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 20h ; sh_flags SHF_STRINGS
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; sh_addr
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT shstrtab - $$ ; sh_offset
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT shstrtab_size ; sh_size
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 0 ; sh_link
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 0 ; sh_info
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 1 ; sh_addralign
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; sh_entsize
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagasect_hsize equ $ - sect_hdr1
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd str_dynstr ; sh_name .dynstr
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 3 ; sh_type SHT_STRTAB
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 20h ; sh_flags SHF_STRINGS
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; sh_addr
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT dynstr - $$ ; sh_offset
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT dynstr_size ; sh_size
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 0 ; sh_link
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 0 ; sh_info
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 1 ; sh_addralign
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; sh_entsize
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd str_dynamic ; sh_name .dynamic
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 6 ; sh_type SHT_DYNAMIC
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 1 ; sh_flags SHF_WRITE
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; sh_addr
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT dynamic - $$ ; sh_offset
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT dynamic_size ; sh_size
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 2 ; sh_link .dynstr
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga dd 0 ; sh_info
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 8 ; sh_addralign
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0 ; sh_entsize
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagashstrtab:
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagastr_shstrtab equ $ - shstrtab
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga db ".shstrtab", 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagastr_dynstr equ $ - shstrtab
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga db ".dynstr", 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagastr_dynamic equ $ - shstrtab
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga db ".dynamic", 0
c498d9365aa68b789215f4f356a9935f70b0fb3bmbshstrtab_size equ $ - shstrtab
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%endmacro ; kmoddeps_header
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; Start of the .dynstr section for the dependency object.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%macro kmoddeps_dynstr_start 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagadynstr:
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga db 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%endmacro
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; A .dynstr string entry for the dependency object.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; The parameters are a symbolic name for the string and the string itself.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%macro kmoddeps_dynstr_string 2
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagadynstr_name_%1 equ $ - dynstr
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga db %2, 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%endmacro
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; End of the .dynstr section for the dependency object.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%macro kmoddeps_dynstr_end 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagadynstr_size equ $ - dynstr
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%endmacro
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; Start of the .dynamic section for the dependency object.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%macro kmoddeps_dynamic_start 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznagadynamic:
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%endmacro
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
c498d9365aa68b789215f4f356a9935f70b0fb3bmb; A .dynamic DT_NEEDED entry for the dependency object.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; The parameter is a symbolic string name previously defined using
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; @a kmoddeps_dynstr_string.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%macro kmoddeps_dynamic_needed 1
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 1 ; DT_NEEDED
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT dynstr_name_%1
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%endmacro
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga;;
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga; End of the .dynamic section for the dependency object.
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%macro kmoddeps_dynamic_end 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 1ah ; DT_FLAGS
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 4 ; TEXTREL
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 6ffffffbh ; DT_FLAGS1
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 0
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 601900h ; SUNW_STRPAD
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 200h
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 601b00h ; SUNW_LDMACH
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga DNAT 62 ; EM_X86_64
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga times 22 DNAT 0 ; padding
c498d9365aa68b789215f4f356a9935f70b0fb3bmbdynamic_size equ $ - dynamic
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga%endmacro ; kmoddeps_dynamic_end
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga
d00f0155af9a9a671eb08a0dc30f5ea0a379c36cayznaga