Global variables in system programs

Alfred Perlstein alfred at freebsd.org
Tue Oct 15 15:44:25 UTC 2013


On 10/15/13 8:07 AM, Sebastian Huber wrote:
> Hello,
>
> I work currently on a port of the FreeBSD network stack to a real-time 
> operating system for embedded targets.  Here the applications are 
> statically linked with the operating system and the network stack.  We 
> would like to use the standard FreeBSD system programs to configure 
> the network stack, e.g. ROUTE(8), IFCONFIG(8), etc.  For example
>
> static const char *const argv[] = {
>   "ifconfig",
>   "lo0",
>   "127.0.0.1"
> };
>
> ifconfig(3, &argv[0]);
>
> These programs use some global variables.  In a statically linked 
> context we have now the following problems
>
> o we cannot call the programs concurrently,
>
> o we have to initialize the values each time.
>
> We would like to follow the FreeBSD sources to stay up-to-date. So it 
> is desirable for us to keep the divergence from the original sources 
> as small as possible.  Are patches acceptable for the FreeBSD project 
> that alter system programs such that
>
> o global variables are moved into context structures,
>
> o constant global variables are declared as "const", and
>
> o variables and functions are declared as "static" if possible?
>
> Attached is a patch for the ROUTE(8) program to give an example.

Wow!  I would really love to see this sort of change make it into 
FreeBSD, not only for linking them all together, but also for running 
them as threads.

I have a question about your propose modification...  Can you run two 
instances of route modified like this?

How many more programs have you modified?




More information about the freebsd-hackers mailing list