Mir

Merge lp:~vanvugt/mir/remove-nonexistent-ClientBuffers-symbols into lp:mir

Proposed by Daniel van Vugt
Status: Merged
Approved by: Daniel van Vugt
Approved revision: no longer in the source branch.
Merged at revision: 4087
Proposed branch: lp:~vanvugt/mir/remove-nonexistent-ClientBuffers-symbols
Merge into: lp:mir
Diff against target: 11 lines (+0/-1)
1 file modified
src/server/symbols.map (+0/-1)
To merge this branch: bzr merge lp:~vanvugt/mir/remove-nonexistent-ClientBuffers-symbols
Reviewer Review Type Date Requested Status
Cemil Azizoglu (community) Approve
Alan Griffiths Abstain
Mir CI Bot continuous-integration Approve
Review via email: mp+318738@code.launchpad.net

Commit message

src/server/symbols.map: Remove non-existent symbol
   mir::frontend::ClientBuffers::operator*;

It was removed in r4064, but even before then never really
existed as an addressable symbol to be versioned.

To post a comment you must log in.
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4063
https://mir-jenkins.ubuntu.com/job/mir-ci/3093/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4142
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4229
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4219
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4219
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4219
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4169
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4169/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4169
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4169/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4169
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4169/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4169
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4169/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4169
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4169/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4169
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4169/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3093/rebuild

review: Approve (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

"It's pure virtual so has no address to export."

That may be true in this case, but isn't true in general. It is perfectly reasonable to implement a pure virtual function and to call it. That's why the script allows it to be exported.

review: Abstain
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

You are either referring to an implementation in a different class, or referring to a non-pure virtual method. Yes, both of those cases would generate code with a symbol to export. But a pure virtual method never exists as a named binary symbol.

I think we could reliably modify the script to omit these, although not a major priority given it's arguably a useful hint in symbols.map that such non-existent symbols do indirectly affect the ABI still (via the vtable). I think I just argued against this branch... but still it's useful that we all have an idea of what's going on.

On the other hand, there is no functional reason for non-existent symbols to be listed for versioning. If you acknowledge that symbols.map is not a definitive list of things that might break your ABI then we don't need to put unused strings in there.

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> You are either referring to an implementation in a different class, or
> referring to a non-pure virtual method. Yes, both of those cases would
> generate code with a symbol to export. But a pure virtual method never exists
> as a named binary symbol.

struct Base { virtual void pure_virtual() = 0; };

struct Derived : Base { void pure_virtual() override; };

// implementing
void Base::pure_virtual() { }

// calling
void Derived::pure_virtual() { Base::pure_virtual(); }

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Oh my. It seems you can implement a pure virtual method within the class where it is pure virtual. I did not expect that. Thanks.

Although it is now a moot point. Revision 4064 deleted the operator so it still needs to be deleted from symbols.map :)

Revision history for this message
Cemil Azizoglu (cemil-azizoglu) wrote :

ok

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/server/symbols.map'
--- src/server/symbols.map 2017-02-16 05:44:15 +0000
+++ src/server/symbols.map 2017-03-02 10:11:15 +0000
@@ -37,7 +37,6 @@
37 mir::frontend::BufferStream::operator*;37 mir::frontend::BufferStream::operator*;
38 mir::frontend::ClientBuffers::?ClientBuffers*;38 mir::frontend::ClientBuffers::?ClientBuffers*;
39 mir::frontend::ClientBuffers::ClientBuffers*;39 mir::frontend::ClientBuffers::ClientBuffers*;
40 mir::frontend::ClientBuffers::operator*;
41 mir::frontend::PromptSession::operator*;40 mir::frontend::PromptSession::operator*;
42 mir::frontend::PromptSession::?PromptSession*;41 mir::frontend::PromptSession::?PromptSession*;
43 mir::frontend::PromptSession::PromptSession*;42 mir::frontend::PromptSession::PromptSession*;

Subscribers

People subscribed via source and target branches