On Fri, Jan 12, 2024 at 9:49 PM Morten Brørup <[email protected]>
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