Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Aug 2016 08:12:51 +0200
From:      Sebastian Huber <sebastian.huber@embedded-brains.de>
To:        Christian Mauderer <christian.mauderer@embedded-brains.de>, Kristof Provost <kp@FreeBSD.org>
Cc:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>
Subject:   Re: Changes to pfctl to allow easier integration into a library
Message-ID:  <57A97463.9000801@embedded-brains.de>
In-Reply-To: <4571f890-6d35-b843-9bd8-86966fe515f5@embedded-brains.de>
References:  <25df9fd5-be75-b9ae-aa3a-22abef3bddf0@embedded-brains.de> <cb7c6bb6-8160-3524-5432-d4ff46e16af5@embedded-brains.de> <0C7EC45D-C3BC-4417-AF77-3ACC027D28B5@FreeBSD.org> <a2479a3c-031c-c137-78a9-8a8f34a12100@embedded-brains.de> <B5DEAF43-9CBD-4C74-AE71-8B7FD278BAA8@FreeBSD.org> <336150f6-9dcd-873f-1f8f-a264dfa4c4ed@embedded-brains.de> <4571f890-6d35-b843-9bd8-86966fe515f5@embedded-brains.de>

next in thread | previous in thread | raw e-mail | index | archive | help


On 08/08/16 16:54, Christian Mauderer wrote:
> Am 02.08.2016 um 07:36 schrieb Christian Mauderer:
>>
>> Am 01.08.2016 um 20:36 schrieb Kristof Provost:
>>> On 1 Aug 2016, at 16:32, Christian Mauderer wrote:
>>>
>>>      Am 01.08.2016 um 16:02 schrieb Kristof Provost:
>>>
>>>          On 1 Aug 2016, at 15:03, Christian Mauderer wrote:
>>>
>>>              Can I improve anything to make the patches more acceptab=
le?
>>>
>>>          Can you explain why
>>>          0003-pfctl-Pull-static-variables-out-of-the-function.patch i=
s
>>>          required?
>>>          I=E2=80=99m not sure I see why you need it.
>>>
>>>      I use roughly the following method for the global variables:
>>>      - I put all initialized (zero or value) variables into a special=
 named
>>>      linker section.
>>>      - In a wrapper around main() I do the following:
>>>      o First save the content of the section to a temporary memory sp=
ace
>>>      o Execute the original (mostly unchanged) main()
>>>      o After main() finishes, I restore the content of the section
>>>      To simplify a later update to a newer source version, the differ=
ence
>>>      between the sources we use and the original FreeBSD sources shou=
ld be
>>>      minimal. Therefore my attempt to put the variables into a sectio=
n is
>>>      the
>>>      following:
>>>      I create a header file (i.e. pfctl-data.h) that contains a match=
ing
>>>      declaration of the global variables but with an added gcc attrib=
ute
>>>      __attribute__((__section__("my_section_name"))). This header fil=
e is
>>>      included at the end of the original pfctl.c.
>>>
>>> Oh.
>>> Ick.
>>> Clever, but =E2=80=A6 ick.
>>>
>>> I=E2=80=99m not a big fan of this patch, because it makes the code a =
bit harder
>>> to follow, rather than improving things as most of your other patches=
 do.
>>> I suspect that something similar can be accomplished with a bit of
>>> linker trickery.
>>>
>>> A first idea is to insert two new symbols (e.g. pf_begin/pf_end) in t=
wo
>>> separate files, the first before all of the pfctl object files, the
>>> second after them.
>>> This should let you group the .data section of the pfctl globals,
>>> accomplishing what you do here with the *attribute* attribute.
>>>
>>> Regards,
>>> Kristof
>>>
>> Hello Kristof,
>>
>> I agree that my solution is not optimal and that this specific patch
>> does not really improve the code for you. So I'll try to find alternat=
ives.
>>
>> The method you suggested would not work for us. We are using part of t=
he
>> FreeBSD sources as a library that is statically linked with the rest o=
f
>> the system. Using our build process, the order of the object files doe=
s
>> not guarantee an order of the symbols. As far as I know a fixed order
>> can only be achieved by the section names.
>>
>> Theoretically it could be possible to get a similar result with some
>> object file manipulation (renaming sections, ...). I'll check if I'm
>> able to use such a solution instead and report back as soon as I can
>> tell you more.
>>
>> Kind regards,
>>
>> Christian Mauderer
>>
> Hello Kristof,
>
> just the promised report: I'm quite convinced that a solution using
> object file manipulation is possible. It only needs some additional wor=
k
> (some adaption to our build system) and therefore needs some time. But
> we work toward it. So just ignore the patch 0003.

I think on PowerPC the object file manipulations could turn out to be=20
rather difficult, since we would have to change also the relocation=20
types. On PowerPC we use the small-data area, so if you have in your=20
source code a global variable like

int g;

then the compiler generates small-data area relocations. However, if you =
use

int g __attribute__((__section__("x")));

then the compiler generates normal relocations. If you simply rename the=20
sections in an object file, e.g. from ".sdata" to ".x", then the=20
relocations cannot be resolved or are invalid at run-time. I think we=20
have to add the section attribute to all global variable declarations at=20
least in the RTEMS port of the FreeBSD code.

--=20
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine gesch=C3=A4ftliche Mitteilung im Sinne des EHUG=
.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?57A97463.9000801>