[rtems-libbsd commit] libbsd.txt: Add guide for user space tools.

Sebastian Huber sebh at rtems.org
Wed Aug 3 12:44:14 UTC 2016

Module:    rtems-libbsd
Branch:    4.11
Commit:    c3a8e6bb86efa492f6fdc513ec4e7f7f31ff26f3
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=c3a8e6bb86efa492f6fdc513ec4e7f7f31ff26f3

Author:    Christian Mauderer <Christian.Mauderer at embedded-brains.de>
Date:      Wed Jul  6 16:06:54 2016 +0200

libbsd.txt: Add guide for user space tools.


 libbsd.txt | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/libbsd.txt b/libbsd.txt
index 06d833f..068a613 100644
--- a/libbsd.txt
+++ b/libbsd.txt
@@ -579,6 +579,36 @@ Generating into /home/joel/newbsd/git/libbsd-8.2
 The script may also be used to generate a diff in either forward or reverse
+== Porting of user space utilities
+The theory behind the described method is to put all BSS and initialized data
+objects into a named section. This section then will be saved before the code is
+executed and restored after it has finished. This method limits to a single
+threaded execution of the application but minimizes the necessary changes to the
+original FreeBSD code.
+. Import and commit the unchanged source files like described above.
+. Add the files to the libbsd.py and build them.
+. Use nm on the generated object files to find out which objects are initialized
+  (either in BSS -- type b or B -- or in the initialized data segment -- type d
+  or D). An example call could look like follows:
+  `arm-rtems4.12-nm build/arm-rtems4.12-xilinx_zynq_a9_qemu/freebsd/contrib/pf/pfctl/pfctl.c.10.o | grep ' [DdbB] '`
+. Check the sources for everything that can be made const. This type of patches
+  should go back to the upstream FreeBSD sources.
+. Check the sources for every global variable that can be made static. This type
+  of patches should go back to the upstream FreeBSD sources.
+. Move static variables out of functions. This patches should also go upstream.
+. Create one `xxx-data.h` file per c module. This header should contain
+  declarations for the remaining initialized objects matching the original
+  declarations but adding a section attribute. The section name has to match the
+  name of the RTEMS_LINKER_RWSET defined further below. For an example look at
+  `freebsd/contrib/pf/pfctl/pfctl-data.h`.
+. Include the header files at the end of the corresponding c files.
+. Add a rtems_bsd_command_xxx wrapper function to the c file containing the main
+  function. For an example look at `rtems_bsd_command_pfctl(...)` in
+  `freebsd/contrib/pf/pfctl/pfctl.c`.
+. Create one compilable commit.
 == Initialization of the BSD Library
 The initialization of the BSD library is based on the FreeBSD SYSINIT(9)

More information about the vc mailing list