Build errors due to duplicate version.map entries in librte_power

Message ID f7ta6s59m2n.fsf@dhcp-25.97.bos.redhat.com (mailing list archive)
State Not Applicable, archived
Headers
Series Build errors due to duplicate version.map entries in librte_power |

Checks

Context Check Description
ci/Intel-compilation fail apply issues

Commit Message

Aaron Conole Feb. 15, 2021, 7:18 p.m. UTC
  Greetings,

During CI runs, I've noticed lots of failures from the Travis-CI side
all related to librte_power/version.map containing some duplicate
symbols.  It seems commit 4d3892dcd77b ("power: make channel message
functions public") made the following hunk:



As can be seen, rte_power_guest_channel_receive_msg was added already
(it's present in the hunk itself).  The rte_power_guest_channel_send_msg
function was added as part of 85ff364f3bd3 ("build: align symbols with
global ABI version").

I guess it may not be allowed to have duplicate symbols here, because in
travis, I see (only for some builds):

clang  -o lib/librte_power.so.21.1 'lib/lib@@rte_power@sta/librte_power_rte_power.c.o' 'lib/lib@@rte_power@sta/librte_power_power_acpi_cpufreq.c.o' 'lib/lib@@rte_power@sta/librte_power_power_kvm_vm.c.o' 'lib/lib@@rte_power@sta/librte_power_guest_channel.c.o' 'lib/lib@@rte_power@sta/librte_power_rte_power_empty_poll.c.o' 'lib/lib@@rte_power@sta/librte_power_power_pstate_cpufreq.c.o' 'lib/lib@@rte_power@sta/librte_power_rte_power_pmd_mgmt.c.o' 'lib/lib@@rte_power@sta/librte_power_power_common.c.o' -Wl,--no-undefined -Wl,--as-needed -shared -fPIC -Wl,--start-group -Wl,-soname,librte_power.so.21 -Wl,--no-as-needed -pthread -lm -ldl lib/librte_eal.so.21.1 lib/librte_kvargs.so.21.1 lib/librte_telemetry.so.21.1 lib/librte_timer.so.21.1 lib/librte_ethdev.so.21.1 lib/librte_net.so.21.1 lib/librte_mbuf.so.21.1 lib/librte_mempool.so.21.1 lib/librte_ring.so.21.1 lib/librte_meter.so.21.1 -Wl,--end-group -Wl,--version-script=/home/travis/build/ovsrobot/dpdk/lib/librte_power/version.map '-Wl,-rpath,$ORIGIN/' -Wl,-rpath-link,/home/travis/build/ovsrobot/dpdk/build/lib -target aarch64-linux-gnu -fuse-ld=lld --gcc-toolchain=/usr 

ld.lld: error: duplicate symbol 'rte_power_guest_channel_send_msg' in version script

Thoughts?
  

Comments

Juraj Linkeš Feb. 22, 2021, 10:31 a.m. UTC | #1
This seems to have gone unnoticed.

lib/librte_power/version.map specifies rte_power_guest_channel_send_msg both under DPDK_21 and EXPERIMENTAL.

This is causing the clang cross-compile job to always fail with the error Aaron provided:
ld.lld: error: duplicate symbol 'rte_power_guest_channel_send_msg' in version script

Only the clang cross compile jobs are failing. This could be due to them using the LLVM linker (ld.lld) and the other clang jobs using the default linker.

I have two questions about this:
1. Is this a real failure?
2. If this is a real failure, should we also use ld.lld in the other clang jobs?

Thanks,
Juraj

> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Aaron Conole
> Sent: Monday, February 15, 2021 8:18 PM
> To: dev@dpdk.org
> Cc: Bruce Richardson <bruce.richardson@intel.com>; David Hunt
> <david.hunt@intel.com>; Anatoly Burakov <anatoly.burakov@intel.com>
> Subject: [dpdk-dev] Build errors due to duplicate version.map entries in
> librte_power
> 
> Greetings,
> 
> During CI runs, I've noticed lots of failures from the Travis-CI side all related to
> librte_power/version.map containing some duplicate symbols.  It seems commit
> 4d3892dcd77b ("power: make channel message functions public") made the
> following hunk:
> 
> diff --git a/lib/librte_power/version.map b/lib/librte_power/version.map index
> 69ca9af616..13f0af3b2d 100644
> --- a/lib/librte_power/version.map
> +++ b/lib/librte_power/version.map
> @@ -34,4 +34,8 @@ EXPERIMENTAL {
>         rte_power_guest_channel_receive_msg;
>         rte_power_poll_stat_fetch;
>         rte_power_poll_stat_update;
> +
> +       # added in 21.02
> +       rte_power_guest_channel_receive_msg;
> +       rte_power_guest_channel_send_msg;
>  };
> 
> 
> As can be seen, rte_power_guest_channel_receive_msg was added already (it's
> present in the hunk itself).  The rte_power_guest_channel_send_msg function
> was added as part of 85ff364f3bd3 ("build: align symbols with global ABI
> version").
> 
> I guess it may not be allowed to have duplicate symbols here, because in travis, I
> see (only for some builds):
> 
> clang  -o lib/librte_power.so.21.1
> 'lib/lib@@rte_power@sta/librte_power_rte_power.c.o'
> 'lib/lib@@rte_power@sta/librte_power_power_acpi_cpufreq.c.o'
> 'lib/lib@@rte_power@sta/librte_power_power_kvm_vm.c.o'
> 'lib/lib@@rte_power@sta/librte_power_guest_channel.c.o'
> 'lib/lib@@rte_power@sta/librte_power_rte_power_empty_poll.c.o'
> 'lib/lib@@rte_power@sta/librte_power_power_pstate_cpufreq.c.o'
> 'lib/lib@@rte_power@sta/librte_power_rte_power_pmd_mgmt.c.o'
> 'lib/lib@@rte_power@sta/librte_power_power_common.c.o' -Wl,--no-
> undefined -Wl,--as-needed -shared -fPIC -Wl,--start-group -Wl,-
> soname,librte_power.so.21 -Wl,--no-as-needed -pthread -lm -ldl
> lib/librte_eal.so.21.1 lib/librte_kvargs.so.21.1 lib/librte_telemetry.so.21.1
> lib/librte_timer.so.21.1 lib/librte_ethdev.so.21.1 lib/librte_net.so.21.1
> lib/librte_mbuf.so.21.1 lib/librte_mempool.so.21.1 lib/librte_ring.so.21.1
> lib/librte_meter.so.21.1 -Wl,--end-group -Wl,--version-
> script=/home/travis/build/ovsrobot/dpdk/lib/librte_power/version.map '-Wl,-
> rpath,$ORIGIN/' -Wl,-rpath-link,/home/travis/build/ovsrobot/dpdk/build/lib -
> target aarch64-linux-gnu -fuse-ld=lld --gcc-toolchain=/usr
> 
> ld.lld: error: duplicate symbol 'rte_power_guest_channel_send_msg' in version
> script
> 
> Thoughts?
>
  
Aaron Conole Feb. 22, 2021, 7:50 p.m. UTC | #2
Juraj Linkeš <juraj.linkes@pantheon.tech> writes:

> This seems to have gone unnoticed.
>
> lib/librte_power/version.map specifies
> rte_power_guest_channel_send_msg both under DPDK_21 and EXPERIMENTAL.
>
> This is causing the clang cross-compile job to always fail with the error Aaron provided:
> ld.lld: error: duplicate symbol 'rte_power_guest_channel_send_msg' in version script
>
> Only the clang cross compile jobs are failing. This could be due to
> them using the LLVM linker (ld.lld) and the other clang jobs using the
> default linker.

The LLVM linker might not support all the same symbol versioning - but
ALSO I don't find what we're doing particularly correct - at least
according to:

   https://www.akkadia.org/drepper/dsohowto.pdf

There doesn't seem to be any case where we would have the symbol appear
in multiple versions without using an alias in the code.  And if the
symbol is changed in an incompatible way, then we've really done the
wrong thing.

> I have two questions about this:
> 1. Is this a real failure?

Maybe.  I think we probably wrote a bad version.map, but I don't know
the history of these symbols.  David?  Anything?

> 2. If this is a real failure, should we also use ld.lld in the other clang jobs?

We need to know if this is also an area where the LLVM linker doesn't
support the same featureset as GNU.

> Thanks,
> Juraj
>
>> -----Original Message-----
>> From: dev <dev-bounces@dpdk.org> On Behalf Of Aaron Conole
>> Sent: Monday, February 15, 2021 8:18 PM
>> To: dev@dpdk.org
>> Cc: Bruce Richardson <bruce.richardson@intel.com>; David Hunt
>> <david.hunt@intel.com>; Anatoly Burakov <anatoly.burakov@intel.com>
>> Subject: [dpdk-dev] Build errors due to duplicate version.map entries in
>> librte_power
>> 
>> Greetings,
>> 
>> During CI runs, I've noticed lots of failures from the Travis-CI side all related to
>> librte_power/version.map containing some duplicate symbols.  It seems commit
>> 4d3892dcd77b ("power: make channel message functions public") made the
>> following hunk:
>> 
>> diff --git a/lib/librte_power/version.map b/lib/librte_power/version.map index
>> 69ca9af616..13f0af3b2d 100644
>> --- a/lib/librte_power/version.map
>> +++ b/lib/librte_power/version.map
>> @@ -34,4 +34,8 @@ EXPERIMENTAL {
>>         rte_power_guest_channel_receive_msg;
>>         rte_power_poll_stat_fetch;
>>         rte_power_poll_stat_update;
>> +
>> +       # added in 21.02
>> +       rte_power_guest_channel_receive_msg;
>> +       rte_power_guest_channel_send_msg;
>>  };
>> 
>> 
>> As can be seen, rte_power_guest_channel_receive_msg was added already (it's
>> present in the hunk itself).  The rte_power_guest_channel_send_msg function
>> was added as part of 85ff364f3bd3 ("build: align symbols with global ABI
>> version").
>> 
>> I guess it may not be allowed to have duplicate symbols here, because in travis, I
>> see (only for some builds):
>> 
>> clang  -o lib/librte_power.so.21.1
>> 'lib/lib@@rte_power@sta/librte_power_rte_power.c.o'
>> 'lib/lib@@rte_power@sta/librte_power_power_acpi_cpufreq.c.o'
>> 'lib/lib@@rte_power@sta/librte_power_power_kvm_vm.c.o'
>> 'lib/lib@@rte_power@sta/librte_power_guest_channel.c.o'
>> 'lib/lib@@rte_power@sta/librte_power_rte_power_empty_poll.c.o'
>> 'lib/lib@@rte_power@sta/librte_power_power_pstate_cpufreq.c.o'
>> 'lib/lib@@rte_power@sta/librte_power_rte_power_pmd_mgmt.c.o'
>> 'lib/lib@@rte_power@sta/librte_power_power_common.c.o' -Wl,--no-
>> undefined -Wl,--as-needed -shared -fPIC -Wl,--start-group -Wl,-
>> soname,librte_power.so.21 -Wl,--no-as-needed -pthread -lm -ldl
>> lib/librte_eal.so.21.1 lib/librte_kvargs.so.21.1 lib/librte_telemetry.so.21.1
>> lib/librte_timer.so.21.1 lib/librte_ethdev.so.21.1 lib/librte_net.so.21.1
>> lib/librte_mbuf.so.21.1 lib/librte_mempool.so.21.1 lib/librte_ring.so.21.1
>> lib/librte_meter.so.21.1 -Wl,--end-group -Wl,--version-
>> script=/home/travis/build/ovsrobot/dpdk/lib/librte_power/version.map '-Wl,-
>> rpath,$ORIGIN/' -Wl,-rpath-link,/home/travis/build/ovsrobot/dpdk/build/lib -
>> target aarch64-linux-gnu -fuse-ld=lld --gcc-toolchain=/usr
>> 
>> ld.lld: error: duplicate symbol 'rte_power_guest_channel_send_msg' in version
>> script
>> 
>> Thoughts?
>>
  

Patch

diff --git a/lib/librte_power/version.map b/lib/librte_power/version.map
index 69ca9af616..13f0af3b2d 100644
--- a/lib/librte_power/version.map
+++ b/lib/librte_power/version.map
@@ -34,4 +34,8 @@  EXPERIMENTAL {
        rte_power_guest_channel_receive_msg;
        rte_power_poll_stat_fetch;
        rte_power_poll_stat_update;
+
+       # added in 21.02
+       rte_power_guest_channel_receive_msg;
+       rte_power_guest_channel_send_msg;
 };