From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by sourceware.org (Postfix) with ESMTPS id 6F9E83852C4B for ; Thu, 17 Nov 2022 19:55:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6F9E83852C4B 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-ej1-x634.google.com with SMTP id n20so7963104ejh.0 for ; Thu, 17 Nov 2022 11:55:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=O59UeF//FPBB6xLP9G3tIZZgyZ6zkOwKNL059WTiqz0=; b=NXVKlfIBoJr0suqOuACzLWGZ/vMpJvgSHn9n4mZ3I16yNTyOeF5UnfdZger5SvynD6 3V4ujrOHlHs98oDGXcC8T85clK2hTJeBTHGyMHYCtjaXfLFHIxMW8U0aKv6KPLfhBlxJ prFNgb/Vb8BQj9/etYoVpgsaHAzcC8ZQJIi8QcqphSyg0L6ZF9LXjdRlY4IEi6l8x904 4cUxajRzBXbnJSWe9RW9Kd143ZjD2qSZX39X8HP7+OqGK0z654YXYfaGkr0GXcFakaP6 tt7Mi3XG+yGFVscaEdQT1c6B1Ph9+NSOspegVGqnHB6Lhm0Hlo6RJ44i+P/8ETAibaZ/ nP7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=O59UeF//FPBB6xLP9G3tIZZgyZ6zkOwKNL059WTiqz0=; b=kAH2+spvAGvtnT9/Umiw/aD0czpxRONZBc9OfxbOtXUO2Nwdqmf1JRTFFTCVdU+rWn NdaRo1ri6Py6VMmBQzOWxczDfM8DMShYCiRwMESNNRFidQoMQ7FypUPAG5KvwsgEtkqR bFpF3k931GXchYn+jjBCSHNJZpoOszheGR5MTcU20N5gC3sUzJ1EjLwA+nclM4hln5vy 7HzdQwqO1Q2NcMIIh7bogRxEMvBdWgCCuztAZ9xGX/VuKz9N+ezqZXwAa+jRisK3m9Cm 9uq6PatR/BS+U5d955kb9XiBV+9Zgh9hqGJJKzqpp9y4NwaFgtI+GUoHwsasqLnL3E4/ KGqg== X-Gm-Message-State: ANoB5pmIsc/FM7ioxybAePqin8U+Q7MtjmwUVGDD2R2W+DsoXrWAxeGZ S7OIrc3ULIBolY0POpoKUKVZuXW4AVgiWcduV6LNFXNl X-Google-Smtp-Source: AA0mqf5yZvAdKwnWN//HUuJlyrNY7nYQ5WlIRVfb3B2r7JxBjYLJPN/SEgyajtBrTF6WFlN3DwEmeU4vTT0N8QS7+hY= X-Received: by 2002:a17:906:2894:b0:7aa:7c3f:8603 with SMTP id o20-20020a170906289400b007aa7c3f8603mr3418305ejd.322.1668714916155; Thu, 17 Nov 2022 11:55:16 -0800 (PST) MIME-Version: 1.0 References: <20221117181308.1761316-1-adhemerval.zanella@linaro.org> In-Reply-To: <20221117181308.1761316-1-adhemerval.zanella@linaro.org> From: "H.J. Lu" Date: Thu, 17 Nov 2022 11:54:37 -0800 Message-ID: Subject: Re: [PATCH v2] i386: Avoid avoid rely on linker optimization to avoid relocation To: Adhemerval Zanella Cc: libc-alpha@sourceware.org, Fangrui Song Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-3023.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, Nov 17, 2022 at 10:13 AM Adhemerval Zanella wrote: > > lld does not implement all the linker optimization to avoid the GOT > relocation as done by binutils (bfd/elf32-i386.c:elf_i386_convert_load_reloc). > The current 'movl main@GOT(%ebx), %eax' will then create a GOT > relocation when building with lld, which make static-pie status to > not being able to start the provided main function. > > The change uses a __wrap_main local symbol, which in turn calls main > (similar as used by aarch64 and s390x). > > Checked on i686-linux-gnu with binutils and lld. > --- > sysdeps/i386/start.S | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/sysdeps/i386/start.S b/sysdeps/i386/start.S > index 4ec04bdfd7..23e4f2b012 100644 > --- a/sysdeps/i386/start.S > +++ b/sysdeps/i386/start.S > @@ -98,11 +98,10 @@ ENTRY (_start) > pushl main@GOT(%ebx) > # else > /* Avoid relocation in static PIE since _start is called before > - it is relocated. Don't use "leal main@GOTOFF(%ebx), %eax" > - since main may be in a shared object. Linker will convert > - "movl main@GOT(%ebx), %eax" to "leal main@GOTOFF(%ebx), %eax" > + it is relocated. This also avoid rely on linker optimization to > + transform 'movl main@GOT(%ebx), %eax' to 'leal main@GOTOFF(%ebx)' > if main is defined locally. */ > - movl main@GOT(%ebx), %eax > + leal __wrap_main@GOTOFF(%ebx), %eax > pushl %eax > # endif > > @@ -130,6 +129,12 @@ ENTRY (_start) > 1: movl (%esp), %ebx > ret > #endif > + > +#if defined PIC && !defined SHARED > +__wrap_main: > + _CET_ENDBR > + jmp main@PLT > +#endif > END (_start) > > /* To fulfill the System V/i386 ABI we need this symbol. Yuck, it's so > -- > 2.34.1 > LGTM. Thanks. -- H.J.