elf obj load: skip zero-sized sections early

Andriy Gapon avg at freebsd.org
Mon Jul 5 16:55:14 UTC 2010


on 02/07/2010 11:29 Bjoern A. Zeeb said the following:
> On Fri, 25 Jun 2010, Andriy Gapon wrote:
> 
> Hey,
> 
>> Proposed patch skips zero sized sections without going into trouble of
>> allocating section entry (progtab), doing zero-sized memory allocs and
>> copies.
>> I observe that sometimes zero-sized set_pcpu sections are produced in
>> module
>> objects, maybe when a module doesn't create any per cpu data of its
>> one, but
>> references external pcpu data.  Not sure.
[snip]
>> This work is based on np@'s investigation and original patch:
>> http://lists.freebsd.org/pipermail/freebsd-hackers/2009-November/030093.html
>>
> 
> Have you guys figured this out already?

By 'this' - do you mean why that zero-sized section is produced at all?
Does it really matter why that happens?

I stated my guess already.  Now I see that it is enough to simply include
sys/pcpu.h for this to happen.  Inline assembly at the start of the said header
unconditionally creates the section.  If DPCPU_DEFINE is never used in a module,
then set_pcpu section remains empty.  Neither compiler nor linker have any reason
to drop empty sections in the build process for amd64 modules.

I am not sure if ".section set_pcpu" assembly can be made conditional or moved
some place else, so that the section is only created when DPCPU_DEFINE is actually
used.

-- 
Andriy Gapon


More information about the freebsd-hackers mailing list