Link [ NetBSD | NetBSD OpenGrok source search | PR fulltext-search | Summary of daily snapshot builds | history of daily build result | pkgsrc commit viewer ]


   
        usage: [branch:branch] [user:user] [path@revision] keyword [... [-excludekeyword [...]]] (e.g. branch:MAIN sys/arch/arm, if_wm.c@1.234 )




switch to index mode

recent branches: MAIN (4h)  netbsd-10 (17d)  netbsd-9 (17d)  netbsd-8 (22d) 

2024-06-03 07:03:15 UTC Now

2021-12-04 01:54:51 UTC MAIN commitmail json YAML

Add visibility definitions for agcre.

For any sources embedding these routines, simply define HIDE_AGCRE,
before including the agcre.h header file, and the routines will have
the hidden visibility attribute set on them.  For more information on
that, see

https://gcc.gnu.org/wiki/Visibility

To stop agcre routines being exported in a .so, simply define
HIDE_AGCRE - I've been doing this successfully in library Makefiles,
for example, this is from elex/lib/Makefile (elex is a library that
calls the agcre functions):

# set symbol visibility for .so
CPPFLAGS+=      -DHIDE_AGCRE

and the agcre symbols will be found just fine when linking and
running, but will not be exported by the linker.  This can save
headaches, and weird crashes, especially when combined with ASLR (when
two libraries define the same symbol, but with different structs or
arguments).

BEFORE:
[2021/12/03 Fri 17:47:19] agc@netbsd-002 ~/local/elex-20211115 [13781] > nm -D lib/libelex.so
w _Jv_RegisterClasses
w __cxa_finalize
w __deregister_frame_info
U __fstat50
w __register_frame_info
U __sF
000000000020f198 D _end
000000000000c240 T _fini
0000000000000ea0 T _init
000000000000aa13 T agcre_new
000000000000bc48 T agcre_regasub
000000000000aa28 T agcre_regcomp
000000000000adde T agcre_regerror
000000000000ae48 T agcre_regexec
000000000000b8fd T agcre_regfree
000000000000b9a2 T agcre_regnsub
000000000000b7e8 T agcre_rev_regexec
U asprintf
U calloc
00000000000027f6 T elex_dispose
0000000000002b6a T elex_exec
0000000000002f5b T elex_exec_str
0000000000002982 T elex_make_new_rule
00000000000027bb T elex_new
U fclose
U fopen
U fprintf
U free
U fwrite
U memchr
U memcmp
U memcpy
U memmove
U memset
U mmap
U munmap
U printf
U putchar
U realloc
U snprintf
U strchr
U strcmp
U strdup
000000000000c10c T striter_dispose
000000000000c165 T striter_exec
000000000000c1da T striter_exec_mem
000000000000c0f7 T striter_new
U strlen
U strtol
U strtoul
U vsnprintf
U warn
U warnx
[2021/12/03 Fri 17:47:22] agc@netbsd-002 ~/local/elex-20211115 [13782] >

AFTER adding HIDE_AGCRE (and HIDE_STRITER) to elex/lib/Makefile:
[2021/12/03 Fri 17:47:45] agc@netbsd-002 ~/local/elex-20211115 [13774] > nm -D lib/libelex.so
w _Jv_RegisterClasses
w __cxa_finalize
w __deregister_frame_info
U __fstat50
w __register_frame_info
U __sF
000000000020e160 D _end
000000000000bf30 T _fini
0000000000000c00 T _init
U asprintf
U calloc
00000000000024e6 T elex_dispose
000000000000285a T elex_exec
0000000000002c4b T elex_exec_str
0000000000002672 T elex_make_new_rule
00000000000024ab T elex_new
U fclose
U fopen
U fprintf
U free
U fwrite
U memchr
U memcmp
U memcpy
U memmove
U memset
U mmap
U munmap
U printf
U putchar
U realloc
U snprintf
U strchr
U strcmp
U strdup
U strlen
U strtol
U strtoul
U vsnprintf
U warn
U warnx

(agc)