Skip to content

openmpi 3.1.5 references private glibc symbol __mmap #7212

@opoplawski

Description

@opoplawski

Thank you for taking the time to submit an issue!

Background information

What version of Open MPI are you using? (e.g., v1.10.3, v2.1.0, git branch name and hash, etc.)

3.1.5

Describe how Open MPI was installed (e.g., from a source/distribution tarball, from a git clone, from an operating system distribution package, etc.)

This is the Fedora 30 openmpi package

Details of the problem

I'm trying to update the Fedora 30 package from openmpi 3.1.4 to 3.1.5, but it cannot be installed:

Error: transaction check vs depsolve:
libc.so.6(GLIBC_PRIVATE)(64bit) is needed by openmpi-3.1.5-1.fc30.x86_64

This appears to be referenced by:

$ readelf -a usr/lib64/openmpi/lib/libopen-pal.so.40.10.5

Relocation section '.rela.plt' at offset 0x1bab0 contains 607 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
00000009f108  001400000007 R_X86_64_JUMP_SLO 0000000000000000 __mmap@GLIBC_PRIVATE + 0

This appears to have be caused by commit 8be0a23:

Author: Mark Allen <markalle@us.ibm.com>
Date:   Wed Mar 27 14:12:20 2019 -0400

    shmat/shmdt additions for patcher

    This is mostly based off recent UCX additions to their patcher:
        https://github.com/openucx/ucx/pull/2703

    They added triggers for
    * mmap when (flags & MAP_FIXED) && (addr != NULL)
    * shmat when (shmflg & SHM_REMAP) && (shmaddr != NULL)

    Beyond that I noticed they already had a trigger for
    * madvise when (advice == MADV_FREE)
    that we didn't so I added that.

    And the other main thing is we didn't really have shmat/shmdt
    active for some systems because we only had a path for
    syscall(SYS_shmdt, ) but we needed to also have a path for
    syscall(SYS_ipc, IPCOP_shmdt, ) and same for shmat.

    Signed-off-by: Mark Allen <markalle@us.ibm.com>
    (cherry picked from commit eb888118e83f56c131aff900b03eab34c92b7805)

which changed:

--- a/opal/mca/memory/patcher/memory_patcher_component.c
+++ b/opal/mca/memory/patcher/memory_patcher_component.c
@@ -104,15 +107,7 @@ opal_memory_patcher_component_t mca_memory_patcher_component = {
  * data. If this can be resolved the two levels can be joined.
  */

-/*
- * The following block of code is #if 0'ed out because we do not need
- * to intercept mmap() any more (mmap() only deals with memory
- * protection; it does not invalidate any rcache entries for a given
- * region).  But if we do someday, this is the code that we'll need.
- * It's a little non-trivial, so we might as well keep it (and #if 0
- * it out).
- */
-#if 0
+#if defined (SYS_mmap)

 #if defined(HAVE___MMAP) && !HAVE_DECL___MMAP
 /* prototype for Apple's internal mmap function */

I'm assuming that SYS_mmap is getting defined. configure reports:

checking whether __mmap is declared... no
checking for __mmap... yes
checking whether __syscall is declared... no
checking for __syscall... no

See also #6853

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions