From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS autolearn=no autolearn_force=no version=3.4.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:content-disposition:mime-version :message-id:subject:to:from:date:sender:from:to:cc:subject:date; bh=4bK0EDvGD33ondi3WcMxi0Y/wfQCNwNWlJOTT68cuOA=; b=D4gSqJv17weJnC7ZCDS8egXc28UFQS3F6tDtGjsnkLxhtGUxpVXcjfwdBGkMPL05lN LpPF5JMqk7/2YGFgMkFkYt5Oa0iddQBPL1lR26mpQqJGLNc4Y1HjDHWG8M7Tt8Z6AmRn DP2HkLhSGcATKA/oHLAprZvJ5y3FvAX0wkUMxVlh+xXE/9BpsRPdkRh3PUTuJo0fHqL6 03iTxXLz+D8Ty9DFhsX17SI+2xc/4Mduq0ec1uAjSOuDKiGewtEB01v6qAFFjRA0A6i/ /IIr1ZEzl5tYjQuIajgjTavGAhsR0ZOtYxRFeMcjrucCtuCoq+kzOSBxr3uwkJW3bEEF 4Ncg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:content-disposition:mime-version :message-id:subject:to:from:date:sender:x-gm-message-state:from:to :cc:subject:date; bh=4bK0EDvGD33ondi3WcMxi0Y/wfQCNwNWlJOTT68cuOA=; b=SMvashcmoAzn9euuoYel2jgnl3KTMQDQ7jcUJKyN3FQ8iTJ1YrJubgrNtAVG+rJsm+ pqx0q+PrQvXzyNmfG3vRTGhLBpagUBBxnsIuHI4vb0Y3LZ9H1WIhPi46WbQP3gFwfkon n/4U/LU5+rcEvElWvy4Vjh4vakiN2etpQHXZ+zYdRZ/W+j92Ri6UBvtliBWBaRh9lGZ2 jqDPXlxQn+MoehsASJKvUTaIFQKrbavbvrNKXbDfBBcqDN+Ko8hirAPMFEi2XLqjMUZD DHhwaQURvgjpDLafvetOAwH33F46BMoEwaSLY1DRqhmnszHbnoSGDujxcd/v4S0VRrAU me/Q== X-Gm-Message-State: ACgBeo12xR86r3H8tphEqb09DMhrcsAaLRhxbvZR8hJ/XlPQFYPKOVHP B0S99NaGaxmCb0AlRPHhGlv29Zz1Ojg= X-Google-Smtp-Source: AA6agR4iraExKlWLVuybW5M0GY9djfmVMbU2QCpRFKgtTBmyq+OJY9+xxJGJSAGFcq5tgyPRgEjGww== X-Received: by 2002:a2e:be0a:0:b0:26b:eb1d:9651 with SMTP id z10-20020a2ebe0a000000b0026beb1d9651mr6850768ljq.196.1663154273698; Wed, 14 Sep 2022 04:17:53 -0700 (PDT) Sender: "Ivan A. Melnikov" Date: Wed, 14 Sep 2022 15:17:52 +0400 From: "Ivan A. Melnikov" To: ALT Linux Team development discussions Message-ID: <20220914111752.67she5b46vzksvvf@titan.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit Subject: [devel] story time: LTO vs weird configure.ac X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Sep 2022 11:17:56 -0000 Archived-At: List-Archive: List-Post: Привет. Хочу поделиться ещё одной любопытной историей. Для обновления boost мне понадобилось пересобрать пакет taler, однако он отказался пересобираться на aarch64 и ppc64le c интересной диагностикой: secp256k1/src/scalar_4x64_impl.h:748:5: error: unknown register name 'rdx' in 'asm' secp256k1/src/scalar_4x64_impl.h:748:5: error: unknown register name 'rax' in 'asm' и дальше в таком духе. Оказалось, что configure этого чуда в вопросах включения ассемблерных вставок не ориентируется на текущую платформу, а просто проверяет, что ассембелрные вставки, совместимые с x86_64, работают, для чего компилирует ($CC -c ...) такую вот бесхитростную программу: $ cat conftest.c #include int main () { uint64_t a = 11, tmp; __asm__ __volatile__("movq \$0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx"); ; return 0; } Естественно, это чудо не компилируется, например, на aarch64: $ aarch64-linux-gnu-gcc -c conftest.c conftest.c: In function 'main': conftest.c:8:60: warning: unknown escape sequence: '\$' 8 | __asm__ __volatile__("movq \$0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx"); | ^ conftest.c:8:3: error: unknown register name '%rdx' in 'asm' 8 | __asm__ __volatile__("movq \$0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx"); | ^~~~~~~ Однако с -flto=auto, прилетающего из %optfags, компилируется: $ aarch64-linux-gnu-gcc -c -flto=auto conftest.c conftest.c: In function 'main': conftest.c:8:60: warning: unknown escape sequence: '\$' 8 | __asm__ __volatile__("movq \$0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx"); | ^ $ echo $? 0 Что, опять же, понятно: при таком LTO содержимое такой ассемблерной вставки будет разбирать только ассемблер и только на этапе компоновки, внутри lto-шащего плагина ld. Замена AC_COMPILE_IFELSE на AC_LINK_IFELSE помогла. Морали не будет, спасибо что дочитали, всем удачи. -- wbr, iv m.