From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 110652 invoked by alias); 27 Sep 2018 04:35:45 -0000 Mailing-List: contact gnu-gabi-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: gnu-gabi-owner@sourceware.org Received: (qmail 110631 invoked by uid 89); 27 Sep 2018 04:35:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.100.1 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,SPF_PASS autolearn=ham version=3.3.2 spammy=H*f:sk:15814b2, H*i:sk:15814b2 X-Spam-Status: No, score=-3.1 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-oi1-f180.google.com Received: from mail-oi1-f180.google.com (HELO mail-oi1-f180.google.com) (209.85.167.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 27 Sep 2018 04:35:43 +0000 Received: by mail-oi1-f180.google.com with SMTP id e17-v6so155461oib.4; Wed, 26 Sep 2018 21:35:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=IIVhdUsnyqdN6f7bt9SFvSg7LyrsgldCdf9Z5CpENi8=; b=p7D37GPRZQQwTFm/pxEbd0xahNQCtdTZX37kmkXbnJFa9opwHyjJipJ+Xmd04R++fe e5mtrILlnoYi5l4VFtrUBfEi4C278Uq0Ux2QkiRznjqnhApxFLFtbAQX6zQwogA1Npsm xp4wvVAeqmOGZoR3c84u1m8Yj6mIB7qLwQl8N+vAlaMjplYzodMp2/bldrh1mIzjPLk7 5sWLLkMoTTYLtmzRFuYCbzPsD8lkPP5sFPlzqySnmzFNzx7Ya3ColZU9qULcH7gTx9xb 763g6kdXCeQEM3d8oY5EtHEu7AdXte+wrlrNQ5ZckrVRuXq9cc4HWxD7BsgBJ7IhItRR Ynhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=IIVhdUsnyqdN6f7bt9SFvSg7LyrsgldCdf9Z5CpENi8=; b=V+MTpVFxOHixsW7YSzkYHUWIBk4kRw8Ws1NayQVBqozjQf85/Mr8hGOI1FrLVRWh3c 8PIKsygk37tmFUkUACuKOU5KhqUlmr2e8uRyjipwHRgTvmbatiHgdQh0vox/l8tTu1v4 XXDkpvJ8WzHi+mxDma1ogwQiirZdgnEqZoGnjPWrKDcyKqr5/x6WA0RjrJkG7G0HDLz4 F00/NwtSGi345wn0wC9Lp+EJRbQOWijOtVG/Xf0SSQ9roBTFKBzgYVNLdCPndCIEXqwO tszsgoGo6jcO+lHlJlbJYbmSM6bO/WnrOP9pk2ntdKDPt91nfb1d8ahKQjenN3KUhb0Z 4GNQ== X-Gm-Message-State: ABuFfogOh8O860HzEYdSOpCyzHlilj9a3paBQ1ewDXkzkR7QqpppWuk4 pc3N9TBs1uB2zEdx+oCkjc/sND7HasgbRs43lA1Zl+wq X-Google-Smtp-Source: ACcGV63s4RZev/XVcbvesajCmDs3neJADlktYdIcl9LAsUYYOifzPnhpE2vtnpugMsdfimTvvnLUvQTR6G07OW2vmhU= X-Received: by 2002:aca:3cc3:: with SMTP id j186-v6mr2329448oia.128.1538022941378; Wed, 26 Sep 2018 21:35:41 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a4a:4d44:0:0:0:0:0 with HTTP; Wed, 26 Sep 2018 21:35:00 -0700 (PDT) In-Reply-To: <15814b22-551c-91a9-4b23-397e374cfd18@redhat.com> References: <15814b22-551c-91a9-4b23-397e374cfd18@redhat.com> From: "H.J. Lu" Date: Mon, 01 Jan 2018 00:00:00 -0000 Message-ID: Subject: Re: RFC: Add SHT_GNU_PHDRS To: "Carlos O'Donell" Cc: gnu-gabi@sourceware.org, Binutils Content-Type: text/plain; charset="UTF-8" X-IsSubscribed: yes X-SW-Source: 2018-q3/txt/msg00009.txt.bz2 On Wed, Sep 26, 2018 at 8:25 PM, Carlos O'Donell wrote: > On 9/26/18 5:53 PM, H.J. Lu wrote: >> When -z separate-code is used to create executable, ld won't place any >> data in the code-only PT_LOAD segment. If there are no data sections >> placed before the code-only PT_LOAD segment, the program headers >> won't be mapped into any PT_LOAD segment. When the executable tries >> to access it (based on the program header address passed in AT_PHDR), >> it will lead to segfault. >> >> I am proposing >> >> #define SHT_GNU_PHDRS 0x6ffffff4 /* Dummy section for program header */ >> >> This is a special read-only SHF_ALLOC zero-size data section. It is the >> first output section, which will force a data PT_LOAD segment with program >> header before the code-only PT_LOAD segment, > > This seems like a huge hack to me. Either ld ensures that the page-aligned > start of the PT_LOAD mapping includes the program headers, or we have to > define SHT_GNU_PHDRS as having exactly that semantic and we need to clearly > explain what a static linker needs to do to accomplish this task. What you > have here needs more documentation. It is to replace another hack: [hjl@gnu-cfl-1 ld]$ readelf -SWl tmpdir/pr23428 There are 13 section headers, starting at offset 0x2008: Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 [ 1] .note.gnu.property NOTE 0000000000400120 000120 000020 00 A 0 0 8 [ 2] .text PROGBITS 0000000000401000 001000 00012d 00 AX 0 0 16 [ 3] .comment PROGBITS 0000000000000000 00112d 00002c 01 MS 0 0 1 [ 4] .debug_aranges PROGBITS 0000000000000000 001160 000060 00 0 0 16 [ 5] .debug_info PROGBITS 0000000000000000 0011c0 000482 00 0 0 1 [ 6] .debug_abbrev PROGBITS 0000000000000000 001642 00016d 00 0 0 1 [ 7] .debug_line PROGBITS 0000000000000000 0017af 000246 00 0 0 1 [ 8] .debug_frame PROGBITS 0000000000000000 0019f8 000040 00 0 0 8 [ 9] .debug_str PROGBITS 0000000000000000 001a38 000374 01 MS 0 0 1 [10] .symtab SYMTAB 0000000000000000 001db0 000198 18 11 11 8 [11] .strtab STRTAB 0000000000000000 001f48 000030 00 0 0 1 [12] .shstrtab STRTAB 0000000000000000 001f78 00008a 00 0 0 1 Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings), I (info), L (link order), O (extra OS processing required), G (group), T (TLS), C (compressed), x (unknown), o (OS specific), E (exclude), l (large), p (processor specific) Elf file type is EXEC (Executable file) Entry point 0x401000 There are 4 program headers, starting at offset 64 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x000140 0x000140 R 0x1000 LOAD 0x001000 0x0000000000401000 0x0000000000401000 0x00012d 0x00012d R E 0x1000 NOTE 0x000120 0x0000000000400120 0x0000000000400120 0x000020 0x000020 R 0x8 GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RWE 0x10 Section to Segment mapping: Segment Sections... 00 .note.gnu.property 01 .text 02 .note.gnu.property 03 [hjl@gnu-cfl-1 ld]$ ./tmpdir/pr23428 [hjl@gnu-cfl-1 ld]$ I added a "dummy" .note.gnu.property section in x86 backend so that program header can be in a data PT_LOAD segment. -- H.J.