On Fri, Jan 12, 2024 at 9:49 PM Morten Brørup <m...@smartsharesystems.com> wrote: > > you can use symver in combination with visibility default > > > > https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html > > > > anyway just food for thought, it would get me out of having to hack & > > enhance the .def from .map generation and unfortunately even with that > > there are going to be cases where i still have to annotate the actual > > symbol export in code (for windows).
Versioning a symbol means you are exporting it, is it not that simple? So I don't see the need for annotating about symbol visibility. > > > > just thought a more unified approach for all might appeal. > > Assuming that we truly want DPDK to support Windows, a more unified approach > is a reasonable ask. > > If we can eliminate the technical obstacles, we should pursue it. IIUC, we still need a "default" version script, as the linker needs one to declare version nodes, and so we have a catch all for unversioned symbols. $ cat symver.c __attribute__ ((__symver__ ("api1@DPDK_23"))) int old_api1(void) { return 0; } __attribute__ ((__symver__ ("api1@@DPDK_24"))) int api1(void) { return 0; } __attribute__ ((__symver__ ("api2@@DPDK_24"))) int api2(void) { return 0; } int api3(void) { return 0; } $ cat symver.map DPDK_23 { }; DPDK_24 { }; EXPERIMENTAL { }; INTERNAL { local: *; }; $ gcc -o symver.o -fPIC -Wall -Werror -c symver.c && gcc -o libsymver.so -shared -fPIC -Wl,--version-script symver.map symver.o && readelf -s libsymver.so | grep api 5: 0000000000001104 11 FUNC GLOBAL DEFAULT 13 api1@@DPDK_24 7: 00000000000010f9 11 FUNC GLOBAL DEFAULT 13 api1@DPDK_23 9: 000000000000110f 11 FUNC GLOBAL DEFAULT 13 api2@@DPDK_24 13: 00000000000010f9 11 FUNC LOCAL DEFAULT 13 old_api1 15: 0000000000001104 11 FUNC LOCAL DEFAULT 13 api1 16: 000000000000111a 11 FUNC LOCAL DEFAULT 13 api3 19: 000000000000110f 11 FUNC LOCAL DEFAULT 13 api2 24: 0000000000001104 11 FUNC GLOBAL DEFAULT 13 api1@@DPDK_24 29: 00000000000010f9 11 FUNC GLOBAL DEFAULT 13 api1@DPDK_23 31: 000000000000110f 11 FUNC GLOBAL DEFAULT 13 api2@@DPDK_24 > > We may have to sacrifice some "nice to have" advantages of the version.map > files along the way, such as having easy access to the list of experimental > functions in the version.map file. Developers lose the single location for versioning information, but we already have some scripts to help list symbols from a given version. We may have to enhance them. But I don't think we would lose features. The devil is probably in the details, though :-). -- David Marchand