Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 07 May 2013 20:59:57 +0200
From:      Dimitry Andric <dim@FreeBSD.org>
To:        Julian Elischer <julian@freebsd.org>
Cc:        svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   Re: svn commit: r250306 - in stable/8/sys: net sys
Message-ID:  <51894F2D.7030708@FreeBSD.org>
In-Reply-To: <51883923.8050505@freebsd.org>
References:  <201305061959.r46JxEUA041105@svn.freebsd.org> <51883923.8050505@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2013-05-07 01:13, Julian Elischer wrote:
> On 5/6/13 12:59 PM, Dimitry Andric wrote:
>> Author: dim
>> Date: Mon May  6 19:59:13 2013
>> New Revision: 250306
>> URL: http://svnweb.freebsd.org/changeset/base/250306
>>
>> Log:
>>     MFC r215137:
>>
>>       Revert r103230, which depended on ld preserving the __start_xxx and
>>       __stop_xxx symbols for custom sections, even when these were not
>>       referenced (at link time).  This behaviour was changed again in binutils
>>       commit 0b8ed435c3fe8bd09a08c23920e65bfb03251221.
>>
>>       This time, put the __GLOBL macro definition in cdefs.h, so it can be
>>       reused in a few other places where it will be needed.
>
> Is this stuff documented anywhere?

If you mean the specifics of <sys/linker_set.h>, I don't think so.  The
documentation for the things that use it, are mostly in SYSINIT(9),
DECLARE_MODULE(9) and module(9).

In any case, the idea is that you tell the compiler and linker to add a
few custom sections to the output, which contain metadata, for example
to initialize a kernel module.

Take the section headers of mpt.ko, for instance:

Section Headers:
   [Nr] Name                Type            Addr     Off    Size   ES Flg Lk Inf Al
   [ 0]                     NULL            00000000 000000 000000 00      0   0  0
   [ 1] .hash               HASH            000000b4 0000b4 00038c 04   A  2   0  4
   [ 2] .dynsym             DYNSYM          00000440 000440 000800 10   A  3   1  4
   [ 3] .dynstr             STRTAB          00000c40 000c40 000792 00   A  0   0  1
   [ 4] .rel.dyn            REL             000013d4 0013d4 004b80 08   A  2   0  4
   [ 5] .text               PROGBITS        00005f60 005f60 01258a 00  AX  0   0 16
   [ 6] .rodata             PROGBITS        000184f0 0184f0 00561d 00   A  0   0 16
   [ 7] set_modmetadata_set PROGBITS        0001db10 01db10 000054 00   A  0   0  4
   [ 8] set_sysinit_set     PROGBITS        0001db64 01db64 000020 00   A  0   0  4
   [ 9] set_sysuninit_set   PROGBITS        0001db84 01db84 000004 00   A  0   0  4
   [10] .dynamic            DYNAMIC         0001e000 01e000 000078 08  WA  3   0  4
   [11] .got.plt            PROGBITS        0001e078 01e078 00000c 04  WA  0   0  4
   [12] .data               PROGBITS        0001e084 01e084 000478 00  WA  0   0  4
   [13] .bss                NOBITS          0001e4fc 01e4fc 000310 00  WA  0   0  4
   [14] .comment            PROGBITS        00000000 01e4fc 0001b3 01  MS  0   0  1
   [15] .SUNW_ctf           PROGBITS        00000000 01e6b0 0065f7 00      0   0  4
   [16] .gnu_debuglink      PROGBITS        00000000 024ca7 000014 00      0   0  1
   [17] .shstrtab           STRTAB          00000000 024cbb 0000bd 00      0   0  1
   [18] .symtab             SYMTAB          00000000 025098 0018d0 10     19 270  4
   [19] .strtab             STRTAB          00000000 026968 001e9f 00      0   0  1
Key to Flags:
   W (write), A (alloc), X (execute), M (merge), S (strings)
   I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
   O (extra OS processing required) o (OS specific), p (processor specific)

The 'set_*' sections are added by the linker_set macros, and are marked
as used, so the compiler will not optimize them away.

However, in some versions of binutils, the linker still optimizes them
away, so we have to resort to inserting assembler directives to force it
to keep them.  This is what r103230 and r215137 were about.

-Dimitry



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51894F2D.7030708>