Bug 1575117

Summary: glibc-devel: mcheck: version node not found for symbol __malloc_initialize_hook@GLIBC_2.2.5
Product: [Fedora] Fedora Reporter: Julian Z <julianzinn>
Component: glibcAssignee: Carlos O'Donell <codonell>
Status: CLOSED DUPLICATE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 28CC: aoliva, arjun.is, codonell, dj, fweimer, law, mfabian, pfrankli, rth, siddhesh
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2018-05-04 19:39:55 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Julian Z 2018-05-04 19:37:37 UTC
Description of problem:

The mcheck component of glibc-devel references a __malloc_initialize_hook symbol that glibc has deprecated and removed, thus leading to a link error.


When building libdrizzle 5.1.4, the following error occurs:


    libtool: link: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/8/crtbeginS.o  libdrizzle/.libs/libdrizzle_libdrizzle_la-binlog.o libdrizzle/.libs/libdrizzle_libdrizzle_la-command.o libdrizzle/.libs/libdrizzle_libdrizzle_la-conn_uds.o libdrizzle/.libs/libdrizzle_libdrizzle_la-error.o libdrizzle/.libs/libdrizzle_libdrizzle_la-handshake.o libdrizzle/.libs/libdrizzle_libdrizzle_la-query.o libdrizzle/.libs/libdrizzle_libdrizzle_la-row.o libdrizzle/.libs/libdrizzle_libdrizzle_la-ssl.o libdrizzle/.libs/libdrizzle_libdrizzle_la-column.o libdrizzle/.libs/libdrizzle_libdrizzle_la-conn.o libdrizzle/.libs/libdrizzle_libdrizzle_la-drizzle.o libdrizzle/.libs/libdrizzle_libdrizzle_la-field.o libdrizzle/.libs/libdrizzle_libdrizzle_la-pack.o libdrizzle/.libs/libdrizzle_libdrizzle_la-poll.o libdrizzle/.libs/libdrizzle_libdrizzle_la-result.o libdrizzle/.libs/libdrizzle_libdrizzle_la-sha1.o libdrizzle/.libs/libdrizzle_libdrizzle_la-state.o libdrizzle/.libs/libdrizzle_libdrizzle_la-statement.o libdrizzle/.libs/libdrizzle_libdrizzle_la-statement_param.o   -lmcheck -lssl -lcrypto -lz -L/usr/lib/gcc/x86_64-redhat-linux/8 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/8/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-redhat-linux/8/crtendS.o /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o  -pthread -O0   -pthread -Wl,-soname -Wl,libdrizzle.so.9 -o libdrizzle/.libs/libdrizzle.so.9.0.0
    /usr/bin/ld: libdrizzle/.libs/libdrizzle.so.9.0.0: version node not found for symbol __malloc_initialize_hook@GLIBC_2.2.5
    /usr/bin/ld: failed to set dynamic section sizes: Bad value
    collect2: error: ld returned 1 exit status

For easier reading, here's a smaller snippet from the above error message:

    /usr/bin/ld: libdrizzle/.libs/libdrizzle.so.9.0.0: version node not found for symbol __malloc_initialize_hook@GLIBC_2.2.5
    /usr/bin/ld: failed to set dynamic section sizes: Bad value

The source of the -lmcheck flag is the file libdrizzle/m4/ax_debug.m4 which contains

    AC_DEFUN([AX_DEBUG],
        [AC_PREREQ([2.63])dnl
        AC_ARG_ENABLE([debug],
          [AS_HELP_STRING([--enable-debug],
            [Add debug code/turns off optimizations (yes|no) @<:@default=no@:>@])],
          [ax_enable_debug=yes
          AC_DEFINE([DEBUG],[1],[Define to 1 to enable debugging code.])
          AX_CHECK_LIBRARY([MCHECK],[mcheck.h],[mcheck],[AX_APPEND_LINK_FLAGS([-lmcheck])])],
          [ax_enable_debug=no
          AC_SUBST([MCHECK])
          AC_DEFINE([DEBUG],[0],[Define to 1 to enable debugging code.])])
    
        AC_MSG_CHECKING([for debug])
        AC_MSG_RESULT([$ax_enable_debug])
        AM_CONDITIONAL([DEBUG],[test "x${ax_enable_debug}" = "xyes"])])

The symbol __malloc_initialize_hook@GLIBC_2.2.5 can be seen here:

    $ nm /usr/lib64/libmcheck.a
                     U _GLOBAL_OFFSET_TABLE_
    0000000000000000 D __malloc_initialize_hook
    0000000000000000 D __malloc_initialize_hook@GLIBC_2.2.5
                     U mcheck
    0000000000000000 t turn_on_mcheck

The symbol __malloc_initialize_hook was removed from glibc in version 2.2.4:

*   https://www.sourceware.org/ml/libc-alpha/2016-08/msg00212.html



Version-Release number of selected component (if applicable):

glibc-devel.x86_64 2.27-8.fc28



How reproducible:

Very



Steps to Reproduce:

1.  Ensure glibc-devel is installed.
2.  wget https://launchpad.net/libdrizzle/5.1/5.1.4/+download/libdrizzle-5.1.4.tar.gz
3.  tar xf libdrizzle-5.1.4.tar.gz 
4.  cd libdrizzle-5.1.4/
5.  ./configure --enable-debug
6.  make



Actual results:

The link error above.



Expected results:

A successful link.



Additional info:

Comment 1 Florian Weimer 2018-05-04 19:39:55 UTC

*** This bug has been marked as a duplicate of bug 1575110 ***