From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io1-xd33.google.com (mail-io1-xd33.google.com [IPv6:2607:f8b0:4864:20::d33]) by sourceware.org (Postfix) with ESMTPS id 074723857352 for ; Mon, 13 Feb 2023 09:23:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 074723857352 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-io1-xd33.google.com with SMTP id j17so4244234ioa.9 for ; Mon, 13 Feb 2023 01:23:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:subject:references:in-reply-to:message-id:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=0YrQrwEKkoxz2yOb/t43DMgNXaObB4D6sNioeNzFvOI=; b=LNVbt/rKbBIcJMnuzY0Wf++6xHNDb2pmf3+EHoB+EfoyIx2ICYVqn4FyxkoG5HDd9d 1zbOfcEVF8WlEvrC7t2kC3MY+G+sRYYvCWK/nUQxggegeKP8eyfwyyfyviuRVHvO0POI KHt67j7Wpkd7gjWJ83YYA89u6WB0dGz9NszRaBUBWNLfm3JSXfquRoKUX7U+f4hY0yho LrtXHO0WA75Du/3kwBYotNKPUo7iFbfqniHlyU6jSbQgRTTd4GmRFrvyo8NDN+R1XoAm RMNZPtdpKK3oBzo4Kv/ddGIMEoS65k5IqmGAYBR7UxfuFbIj9rEE5rsdu3pm2l0bdaet YhBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:subject:references:in-reply-to:message-id:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0YrQrwEKkoxz2yOb/t43DMgNXaObB4D6sNioeNzFvOI=; b=deWA2uOPFuvwPv6rpTPr3ulskD31CF2UmUIEjWSPdZ2W4x/TQ+Gf5rDVCkqYWFSfmM aS4x47gmjyZzMFRVcyCwPszOfLoL2CM3YpTppgPkmrPqEJNuckDjLClSp+L+GJMQG+ha CvtQYUaVzCyVVJJMpNVG+5jrvrzPOwms2hN+4FAucTasO4Q+yv9YG4LkRO+k8wYK8wg/ oudGoFvxY8mIGiWWAgrmrgrXjC8kqj7X4KXGi6TTDCe/6D/zEJwH7oI9Axc/NWOt+ow2 kiiEH0bZZM0PQRmnqyu/kwOdwI9gKr4bW/9GOWRqUT5QcvCROaUVXU1wvkTC7psMRh9M rWtQ== X-Gm-Message-State: AO0yUKWSPfnQiHq4TPuJNgYHFx5cNjlgUTpNBxq+x7ziMxgbUMYJdKwM XG1r7VtdTBnAjCD7I3pWr4FMeqQgoKQ= X-Google-Smtp-Source: AK7set9mGdA3zXYSEms3PX3h52pP+6Pt4n22uA6nuDWW7JQ4m2y9Z1Ha4jo36rpJCTuDLVQhYsyURQ== X-Received: by 2002:a5d:8586:0:b0:71a:4874:3864 with SMTP id f6-20020a5d8586000000b0071a48743864mr19933251ioj.6.1676280215473; Mon, 13 Feb 2023 01:23:35 -0800 (PST) Received: from [192.168.50.73] ([104.153.230.41]) by smtp.gmail.com with ESMTPSA id a11-20020a029f8b000000b003a9726646c6sm3732161jam.91.2023.02.13.01.23.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 13 Feb 2023 01:23:34 -0800 (PST) Date: Mon, 13 Feb 2023 03:23:26 -0600 From: Nima Hamidi To: libc-help@sourceware.org Message-ID: <052bc685-e6bb-4fbb-a696-f6810bdab1f6@Spark> In-Reply-To: <14297fb9-70cb-42b1-a477-6fb68c03ff64@Spark> References: <14297fb9-70cb-42b1-a477-6fb68c03ff64@Spark> Subject: Using dlmope/dlopem with RTLD_GLOBAL X-Readdle-Message-ID: 052bc685-e6bb-4fbb-a696-f6810bdab1f6@Spark MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="63ea0194_5ff87e05_6110" X-Spam-Status: No, score=-0.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,URIBL_BLACK autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --63ea0194_5ff87e05_6110 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hello all, I=E2=80=99m trying to=C2=A0dlmopen=C2=A0a shared library which in turn=C2= =A0dlopen=E2=80=99s another shared library with=C2=A0RTLD_GLOBAL=C2=A0flag = set. On some platforms, it works as I expect it, but on some other platform= s it crashes. Here is the simplest example I could make to show that crash: I create a docker container containing my example using: //////////////////////////////////////////////////////////// docker run --rm -it ubuntu:devel bash apt-get update apt install g++-10 cd ~ cat >a.cpp < #include using namespace std; int main () { =C2=A0void * handle =3D nullptr; =C2=A0bool mopen =3D true; =C2=A0if (mopen) { =C2=A0cout << "mopening libb.so" << endl; =C2=A0handle =3D dlmopen(LM_ID_NEWLM, "libb.so", RTLD_NOW | RTLD_LOCAL); =C2=A0} else { =C2=A0cout << "opening libb.so" << endl; =C2=A0handle =3D dlopen("libb.so", RTLD_NOW | RTLD_LOCAL); =C2=A0} =C2=A0void (*bfunc)(); =C2=A0*(void**)(&bfunc) =3D dlsym(handle, "bfunc"); =C2=A0bfunc(); =C2=A0return 0; } EOF cat >b.cpp < #include using namespace std; extern "C" void bfunc() { =C2=A0cout << "bfunc in b.cpp is being called..." << endl; =C2=A0void * handle =3D dlopen("libc.so", RTLD_NOW | RTLD_GLOBAL); =C2=A0//void * handle =3D dlopen("libc.so", RTLD_NOW | RTLD_LOCAL); =C2=A0void (*cfunc)(); =C2=A0*(void**)(&cfunc) =3D dlsym(handle, "cfunc"); =C2=A0cfunc(); } EOF cat >c.cpp < using namespace std; extern "C" void cfunc() { =C2=A0cout << "cfunc in c.cpp is being called..." << endl; } EOF g++-10 a.cpp -o a -ldl -Wl,-rpath `pwd` g++-10 b.cpp -o libb.so -shared -fPIC -ldl -Wl,-rpath `pwd` g++-10 c.cpp -o libc.so -shared -fPIC //////////////////////////////////////////////////////////// Finally, when I run=C2=A0LD_DEBUG=3D1 ./a, it crashes with the following lo= g: =C2=A0902: symbol=3D_ZNSt8ios_base4InitD1Ev; lookup in file=3D/root/libb.so= [1] =C2=A0902: symbol=3D_ZNSt8ios_base4InitD1Ev; lookup in file=3D/lib/aarch64-= linux-gnu/libstdc++.so.6 [1] =C2=A0902: symbol=3D__cxa_finalize; lookup in file=3D/root/libb.so [1] =C2=A0902: symbol=3D__cxa_finalize; lookup in file=3D/lib/aarch64-linux-gnu= /libstdc++.so.6 [1] =C2=A0902: symbol=3D__cxa_finalize; lookup in file=3D/lib/aarch64-linux-gnu= /libc.so.6 [1] =C2=A0902: symbol=3D_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc= ; lookup in file=3D/root/libb.so [1] =C2=A0902: symbol=3D_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc= ; lookup in file=3D/lib/aarch64-linux-gnu/libstdc++.so.6 [1] =C2=A0902: symbol=3D_ZNSolsEPFRSoS_E; lookup in file=3D/root/libb.so [1] =C2=A0902: symbol=3D_ZNSolsEPFRSoS_E; lookup in file=3D/lib/aarch64-linux-g= nu/libstdc++.so.6 [1] =C2=A0902: symbol=3D__cxa_atexit; lookup in file=3D/root/libb.so [1] =C2=A0902: symbol=3D__cxa_atexit; lookup in file=3D/lib/aarch64-linux-gnu/l= ibstdc++.so.6 [1] =C2=A0902: symbol=3D__cxa_atexit; lookup in file=3D/lib/aarch64-linux-gnu/l= ibc.so.6 [1] =C2=A0902: symbol=3D_ZNSt8ios_base4InitC1Ev; lookup in file=3D/root/libb.so= [1] =C2=A0902: symbol=3D_ZNSt8ios_base4InitC1Ev; lookup in file=3D/lib/aarch64-= linux-gnu/libstdc++.so.6 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/root/libb.so [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libstdc++.so.6 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libc.so.6 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/ld-linux-aarch64.= so.1 [0] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libm.so.6 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libgcc_s.so.1 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/root/libc.so [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libstdc++.so.6 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libc.so.6 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libm.so.6 [1] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/ld-linux-aarch64.= so.1 [0] =C2=A0902: symbol=3D__gmon_start__; lookup in file=3D/lib/aarch64-linux-gnu= /libgcc_s.so.1 [1] Segmentation fault The libc version that I=E2=80=99m using is 2.36 as outputted by $ ldd --version ldd (Ubuntu GLIBC 2.36-0ubuntu4) 2.36 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by Roland McGrath and Ulrich Drepper The error won=E2=80=99t happen if I=C2=A0dlopen=C2=A0with=C2=A0RTLD_LOCAL= =C2=A0in b.cpp rather than RTLD_GLOBAL. I would appreciate any help on what= I=E2=80=99m doing wrong here. Best, Nima --63ea0194_5ff87e05_6110--