VirtualBox

source: vbox/trunk/include/iprt/solaris/kmoddeps.mac@ 63807

Last change on this file since 63807 was 62476, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1; $Id: kmoddeps.mac 62476 2016-07-22 18:23:50Z vboxsync $
2;; @file
3; Assembly macros for generating Solaris kernel module dependencies
4;
5
6;
7; Copyright (C) 2012-2016 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17; The contents of this file may alternatively be used under the terms
18; of the Common Development and Distribution License Version 1.0
19; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20; VirtualBox OSE distribution, in which case the provisions of the
21; CDDL are applicable instead of those of the GPL.
22;
23; You may elect to license modified versions of this file under the
24; terms and conditions of either the GPL or the CDDL or both.
25;
26
27; Solaris kernel modules use non-standard ELF constructions to express inter-
28; module dependencies, namely a DT_NEEDED tag inside a relocatable ELF file.
29; The Solaris linker can generate these automatically; since yasm can't
30; produce an ELF file which quite fits Solaris's requirements we create one
31; manually using flat binary output format. In order to save unnecessary
32; repetition, this file defines macros for the repetitive bits which can be
33; reused by the actual dependency objects. Certainly not the nicest way to
34; get the effect we want, but probably a reasonable compromise between
35; cleanness and required effort.
36;
37
38%ifdef RT_ARCH_AMD64
39
40BITS 64
41;;
42; Native word size
43%define DNAT dq
44
45;;
46; ELF machine number for the current architecture.
47%define EM_CUR 62 ; EM_X86_64
48
49;;
50; ELF header class for the current architecture.
51%define CLASS 2
52
53%else
54
55BITS 32
56%define DNAT dd
57%define EM_CUR 3 ; EM_386
58%define CLASS 1
59
60%endif
61
62;;
63; ELF file header, section tables and shared string table for the dependency
64; object.
65%macro kmoddeps_header 0
66elf_hdr: ; elfxx_hdr structure
67 db 7fh, "ELF" ; e_ident
68 db CLASS, 1, 1 ; e_ident
69 times 9 db 0 ; padding
70 dw 1 ; e_type ET_REL
71 dw EM_CUR ; e_machine
72 dd 1 ; e_version EV_CURRENT
73 DNAT 0 ; e_entry
74 DNAT 0 ; e_phoff
75 DNAT sect_hdr - $$ ; e_shoff
76 dd 0 ; e_flags
77 dw elf_hsize ; e_ehsize
78 dw 0 ; e_phentsize
79 dw 0 ; e_phnum
80 dw sect_hsize ; e_shentsize
81 dw 4 ; e_shnum
82 dw 1 ; e_shstrndx section .shstrtab
83elf_hsize equ $ - elf_hdr
84
85sect_hdr: ; elfxx_shdr structure
86 times sect_hsize db 0 ; undefined section
87
88sect_hdr1:
89 dd str_shstrtab ; sh_name .shstrtab
90 dd 3 ; sh_type SHT_STRTAB
91 DNAT 20h ; sh_flags SHF_STRINGS
92 DNAT 0 ; sh_addr
93 DNAT shstrtab - $$ ; sh_offset
94 DNAT shstrtab_size ; sh_size
95 dd 0 ; sh_link
96 dd 0 ; sh_info
97 DNAT 1 ; sh_addralign
98 DNAT 0 ; sh_entsize
99sect_hsize equ $ - sect_hdr1
100
101 dd str_dynstr ; sh_name .dynstr
102 dd 3 ; sh_type SHT_STRTAB
103 DNAT 20h ; sh_flags SHF_STRINGS
104 DNAT 0 ; sh_addr
105 DNAT dynstr - $$ ; sh_offset
106 DNAT dynstr_size ; sh_size
107 dd 0 ; sh_link
108 dd 0 ; sh_info
109 DNAT 1 ; sh_addralign
110 DNAT 0 ; sh_entsize
111
112 dd str_dynamic ; sh_name .dynamic
113 dd 6 ; sh_type SHT_DYNAMIC
114 DNAT 1 ; sh_flags SHF_WRITE
115 DNAT 0 ; sh_addr
116 DNAT dynamic - $$ ; sh_offset
117 DNAT dynamic_size ; sh_size
118 dd 2 ; sh_link .dynstr
119 dd 0 ; sh_info
120 DNAT 8 ; sh_addralign
121 DNAT 0 ; sh_entsize
122
123shstrtab:
124str_shstrtab equ $ - shstrtab
125 db ".shstrtab", 0
126str_dynstr equ $ - shstrtab
127 db ".dynstr", 0
128str_dynamic equ $ - shstrtab
129 db ".dynamic", 0
130shstrtab_size equ $ - shstrtab
131%endmacro ; kmoddeps_header
132
133;;
134; Start of the .dynstr section for the dependency object.
135%macro kmoddeps_dynstr_start 0
136dynstr:
137 db 0
138%endmacro
139
140;;
141; A .dynstr string entry for the dependency object.
142; The parameters are a symbolic name for the string and the string itself.
143%macro kmoddeps_dynstr_string 2
144dynstr_name_%1 equ $ - dynstr
145 db %2, 0
146%endmacro
147
148;;
149; End of the .dynstr section for the dependency object.
150%macro kmoddeps_dynstr_end 0
151dynstr_size equ $ - dynstr
152%endmacro
153
154;;
155; Start of the .dynamic section for the dependency object.
156%macro kmoddeps_dynamic_start 0
157dynamic:
158%endmacro
159
160;;
161; A .dynamic DT_NEEDED entry for the dependency object.
162; The parameter is a symbolic string name previously defined using
163; @a kmoddeps_dynstr_string.
164%macro kmoddeps_dynamic_needed 1
165 DNAT 1 ; DT_NEEDED
166 DNAT dynstr_name_%1
167%endmacro
168
169;;
170; End of the .dynamic section for the dependency object.
171%macro kmoddeps_dynamic_end 0
172 DNAT 1ah ; DT_FLAGS
173 DNAT 4 ; TEXTREL
174 DNAT 6ffffffbh ; DT_FLAGS1
175 DNAT 0
176 DNAT 601900h ; SUNW_STRPAD
177 DNAT 200h
178 DNAT 601b00h ; SUNW_LDMACH
179 DNAT 62 ; EM_X86_64
180 times 22 DNAT 0 ; padding
181dynamic_size equ $ - dynamic
182%endmacro ; kmoddeps_dynamic_end
183
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette