• Willy Tarreau's avatar
    tools/nolibc: make errno a weak symbol instead of a static one · 1caa1154
    Willy Tarreau authored
    Till now errno was declared static so that it could be eliminated if
    unused. While the goal is commendable for tiny executables as it allows
    to eliminate any data and bss segments when not used, this comes with
    some limitations, one of which being that the errno symbol seen in
    different units are not the same. Even though this has never been a
    real issue given the nature of the programs involved till now, it
    happens that referencing the same symbol from multiple units can also
    be achieved using weak symbols, with a difference being that only one
    of them will be used for all of them. Compared to weak symbols, static
    basically have no benefit for regular programs since there are always
    at least a few variables in most of these, so the bss segment cannot
    be eliminated. E.g:
    
      $ size nolibc-test-static-errno
         text    data     bss     dec     hex filename
        11531       0      48   11579    2d3b nolibc-test-static-errno
    
    Furthermore, the weak symbol doesn't use bss storage at all, resulting
    in a slightly section:
    
      $ size nolibc-test-weak-errno
         text    data     bss     dec     hex filename
        11531       0      40   11571    2d33 nolibc-test-weak-errno
    
    This patch thus converts errno from static to weak.
    Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    1caa1154
errno.h 655 Bytes