mirror of
https://github.com/opnsense/src.git
synced 2026-04-23 15:19:31 -04:00
simplifying the module linking process and eliminating the risks
associated with doubly-defined variables.
Cases where commons were legitimately used (detection of
compiled-in subsystems) have been converted to use sysinits, and
any new code should use this or an equivalent practice as a
matter of course.
Modules can override this behaviour by substituting -fno-common
out of ${CFLAGS} in cases where commons are necessary
(eg. third-party object modules). Commons will be resolved and
allocated space when the kld is linked as part of the module
build process, so they will not pose a risk to the kernel or
other modules.
Provide a mechanism for controlling the export of symbols from
the module namespace. The EXPORT_SYMS variable may be set in the
Makefile to NO (export no symbols), a list of symbols to export,
or the name of a file containing a newline-seperated list of
symbols to be exported. Non-exported symbols are converted to
local symbols. If EXPORT_SYMS is not set, all global symbols are
currently exported. This behaviour is expected to change (to
exporting no symbols) once modules have been converted.
Reviewed by: peter (in principle)
Obtained from: green (kmod_syms.awk)
27 lines
600 B
Awk
27 lines
600 B
Awk
# $FreeBSD$
|
|
|
|
# Read global symbols from object file.
|
|
BEGIN {
|
|
while ("nm -g " ARGV[1] | getline) {
|
|
if (match($0, /^[^[:space:]]+ [^AU] (.*)$/)) {
|
|
syms[$3] = $2
|
|
}
|
|
}
|
|
}
|
|
|
|
# De-list symbols from the export list.
|
|
// {
|
|
if (ARGIND == 1)
|
|
nextfile
|
|
delete syms[$0]
|
|
}
|
|
|
|
# Strip commons, make everything else local.
|
|
END {
|
|
for (member in syms) {
|
|
if (syms[member] == "C")
|
|
print "-N" member
|
|
else
|
|
print "-L" member
|
|
}
|
|
}
|