From owner-svn-src-head@freebsd.org Tue Oct 30 18:19:55 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EFFAE10F0701 for ; Tue, 30 Oct 2018 18:19:54 +0000 (UTC) (envelope-from marklmi26-fbsd@yahoo.com) Received: from sonic306-21.consmr.mail.ne1.yahoo.com (sonic306-21.consmr.mail.ne1.yahoo.com [66.163.189.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 867C872C8B for ; Tue, 30 Oct 2018 18:19:54 +0000 (UTC) (envelope-from marklmi26-fbsd@yahoo.com) X-YMail-OSG: Gx9CLW0VM1njsdgV._D1tPGRmcQwxPd0Epv3WkbJSkXSPirPbo0ffHK0sLYsqZC jrgtlDKMe.jVFmt62Xxk46nykyVfCZrAb7ZFhf4cXRUfbylZEUgpqTM8Ipkmox7DPQbs9sd6pMFN 7L3aXml8RfJ53ZGc93HWfBIFtCe8MgZYWZdVhIXuQCi4Eul2PK44PUBoW_QpG0fQeA1cACqumcJ2 s_1NJ7F9xtCKL6hIkPVL9DFp89hroJNTteA_rXdSYUARfbVnpQWo5g1Jwc6qM.u.zJlJ33apSdEv mJrvWV2ew0_zsX4IXNmnH08aGmYb0y1vVVpUQ43USeIEhHSZ0J7ltOdPIk5oa9gRIp7npUp2wKnC qH64BOWD9YTSuCQ8ZJ_Vc04PEN7qGNnfCvNfHdvsckO_LofR21UFof7j9aeBaxwQB8VB.cmz27iq ywAvtf7E8dC3otDOS5L6f.xr3AgO3aw6I69kXkgiP9TwzUmTxNxqP3dNQYp8Z6A90hygdhk4Ka.p gzxq6w4leSGzL1MhWbBG1_fbF601VljeZKAHFcwJxFpryrIVoYc_GHseoscVkufkMH.30QbuewL5 4lk2X_VJaQNxQmB2sj9YI2Zmyh25HUq9ztTIkkIFGtCF51fE0KRRdWbOHzJVJyNjuttcKej4.d9d mE2cDMgcCz8gbd4eW5Kj2j3SN81bQmictDBqubHU_QYaoxVi8fO7EmDHdOFM0ZydWLfy6Z8GeOsw fCWaJIBuc8i2W6xIdqy3895aZVYZ91NzHHqpCVzwNyt470L_OudD2nX4LUgQOIgZ1VZ2pN2gBNC_ Q0k2ZkEyM_F6m6wsZvsn1ikVk3WRJeN10.gUnBNBc8F.Y505JQMM_VrL3LRMScpTDd7u6CHqwWxo 6ot1bF98RsZCb2FZ3olqHh8Mk.Obw6hpKXH9ZwN.NNelbs7.rTOZoTzcf_LcRyXVbIcWvhuWy80a ijMbJohnrPeYkojFvbWFtsXSX.6XwTRq.lZ0Ts9lhdDb2KyYOlaU8rU3nAjWBbovjRqa.Y3FplkO W_gbUMazsAQxqQh3zKQQNoUgLLoHoigT12GR0Uk3yFUjKgw-- Received: from sonic.gate.mail.ne1.yahoo.com by sonic306.consmr.mail.ne1.yahoo.com with HTTP; Tue, 30 Oct 2018 18:19:48 +0000 Received: from c-76-115-7-162.hsd1.or.comcast.net (EHLO [192.168.1.25]) ([76.115.7.162]) by smtp425.mail.ne1.yahoo.com (Oath Hermes SMTP Server) with ESMTPA ID 9f69bd3e36dabfc4d8d7d509a60435cf; Tue, 30 Oct 2018 18:19:47 +0000 (UTC) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\)) Subject: Re: svn commit: r339876 - head/libexec/rtld-elf Message-Id: <7DC6D9C4-C153-4BCE-851C-22C890AB0D73@yahoo.com> Date: Tue, 30 Oct 2018 11:19:46 -0700 To: arichardson@freebsd.org, svn-src-head@freebsd.org X-Mailer: Apple Mail (2.3445.9.1) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Oct 2018 18:19:55 -0000 Alexander Richardson arichardson at freebsd.org wrote on Tue Oct 30 15:33:00 UTC 2018 : > On Tue, 30 Oct 2018 at 10:17, Michael Tuexen > wrote: > > > > > On 29. Oct 2018, at 22:08, Alex Richardson wrote: > > > > > > Author: arichardson > > > Date: Mon Oct 29 21:08:02 2018 > > > New Revision: 339876 > > > URL: https://svnweb.freebsd.org/changeset/base/339876 > > > > > > Log: > > > rtld: set obj->textsize correctly > > > > > > With lld-generated binaries the first PT_LOAD will usually be a = read-only > > > segment unless you pass --no-rosegment. For those binaries the = textsize is > > > determined by the next PT_LOAD. To allow both LLD and bfd 2.17 = binaries to > > > be parsed correctly use the end of the last PT_LOAD that is = marked as > > > executable instead. > > > > > > I noticed that the value was wrong while adding some debug prints = for some rtld > > > changes for CHERI binaries. `obj->textsize` only seems to be used = by PPC so the > > > effect is untested. However, the value before was definitely = wrong and the new > > > result matches the phdrs. > > I build kernel and world with a revision later than this on a PPC. = Buildword > > ends up with a world where almost all binaries are segfaulting.... = Especially gdb > > (but svn, ls or so all segfault). > > > > Best regards > > Michael >=20 > This is rather surprising since if anything the range of the icache > flush should increase rather than decrease after this change. >=20 > I can only see this causing a behaviour change if we actually need to > flush more than just the executable segments. > Is it possible that some binary/library contains a non-executable > segment as the first PT_LOAD? > Or is there some linker script that adds custom PHDRS? The following is based on using devel/powerpc64-xtoolchain-gcc to buildworld buildkernel on/for powerpc64. (I experiment with using fairly modern tools to target powerpc64 and powerpc.) The build context is head -r339076 based, both for what did the build and for what it was building. I report from both elfdump and objdump output because each seems to have some oddities in what it outputs. I start with elfdump (which leaves sh_flags blank and shows a section header with sh_name empty that objdump does not list at all): # elfdump -pc /bin/ls | less program header: entry: 0 p_type: PT_PHDR p_offset: 64 p_vaddr: 0x10000040 p_paddr: 0x10000040 p_filesz: 392 p_memsz: 392 p_flags: PF_R p_align: 8 entry: 1 p_type: PT_INTERP p_offset: 456 p_vaddr: 0x100001c8 p_paddr: 0x100001c8 p_filesz: 21 p_memsz: 21 p_flags: PF_R p_align: 1 entry: 2 p_type: PT_LOAD p_offset: 0 p_vaddr: 0x10000000 p_paddr: 0x10000000 p_filesz: 37132 p_memsz: 37132 p_flags: PF_X|PF_R p_align: 65536 entry: 3 p_type: PT_LOAD p_offset: 37136 p_vaddr: 0x10019110 p_paddr: 0x10019110 p_filesz: 3808 p_memsz: 4328 p_flags: PF_W|PF_R p_align: 65536 entry: 4 p_type: PT_DYNAMIC p_offset: 37176 p_vaddr: 0x10019138 p_paddr: 0x10019138 p_filesz: 448 p_memsz: 448 p_flags: PF_W|PF_R p_align: 8 entry: 5 p_type: PT_NOTE p_offset: 480 p_vaddr: 0x100001e0 p_paddr: 0x100001e0 p_filesz: 48 p_memsz: 48 p_flags: PF_R p_align: 4 entry: 6 p_type: PT_LOAD p_offset: 0 p_vaddr: 0 p_paddr: 0 p_filesz: 0 p_memsz: 0 p_flags: PF_W|PF_R p_align: 16 section header: entry: 0 sh_name:=20 sh_type: SHT_NULL sh_flags:=20 sh_addr: 0 sh_offset: 0 sh_size: 0 sh_link: 0 sh_info: 0 sh_addralign: 0 sh_entsize: 0 entry: 1 sh_name: .interp sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x100001c8 sh_offset: 456 sh_size: 21 sh_link: 0 sh_info: 0 sh_addralign: 1 sh_entsize: 0 entry: 2 sh_name: .note.tag sh_type: SHT_NOTE sh_flags:=20 sh_addr: 0x100001e0 sh_offset: 480 sh_size: 48 sh_link: 0 sh_info: 0 sh_addralign: 4 sh_entsize: 0 entry: 3 sh_name: .hash sh_type: SHT_HASH sh_flags:=20 sh_addr: 0x10000210 sh_offset: 528 sh_size: 636 sh_link: 4 sh_info: 0 sh_addralign: 8 sh_entsize: 4 entry: 4 sh_name: .dynsym sh_type: SHT_DYNSYM sh_flags:=20 sh_addr: 0x10000490 sh_offset: 1168 sh_size: 2160 sh_link: 5 sh_info: 1 sh_addralign: 8 sh_entsize: 24 entry: 5 sh_name: .dynstr sh_type: SHT_STRTAB sh_flags:=20 sh_addr: 0x10000d00 sh_offset: 3328 sh_size: 858 sh_link: 0 sh_info: 0 sh_addralign: 1 sh_entsize: 0 entry: 6 sh_name: .gnu.version sh_type: SHT_SUNW(GNU)_versym sh_flags:=20 sh_addr: 0x1000105a sh_offset: 4186 sh_size: 180 sh_link: 4 sh_info: 0 sh_addralign: 2 sh_entsize: 2 entry: 7 sh_name: .gnu.version_r sh_type: SHT_SUNW(GNU)_verneed sh_flags:=20 sh_addr: 0x10001110 sh_offset: 4368 sh_size: 80 sh_link: 5 sh_info: 1 sh_addralign: 8 sh_entsize: 0 entry: 8 sh_name: .rela.dyn sh_type: SHT_RELA sh_flags:=20 sh_addr: 0x10001160 sh_offset: 4448 sh_size: 408 sh_link: 4 sh_info: 0 sh_addralign: 8 sh_entsize: 24 entry: 9 sh_name: .rela.plt sh_type: SHT_RELA sh_flags:=20 sh_addr: 0x100012f8 sh_offset: 4856 sh_size: 1776 sh_link: 4 sh_info: 21 sh_addralign: 8 sh_entsize: 24 entry: 10 sh_name: .init sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x100019f0 sh_offset: 6640 sh_size: 44 sh_link: 0 sh_info: 0 sh_addralign: 16 sh_entsize: 0 entry: 11 sh_name: .text sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10001a20 sh_offset: 6688 sh_size: 29188 sh_link: 0 sh_info: 0 sh_addralign: 32 sh_entsize: 0 entry: 12 sh_name: .fini sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10008c30 sh_offset: 35888 sh_size: 36 sh_link: 0 sh_info: 0 sh_addralign: 16 sh_entsize: 0 entry: 13 sh_name: .rodata sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10008c58 sh_offset: 35928 sh_size: 1200 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 0 entry: 14 sh_name: .eh_frame sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10009108 sh_offset: 37128 sh_size: 4 sh_link: 0 sh_info: 0 sh_addralign: 4 sh_entsize: 0 entry: 15 sh_name: .ctors sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10019110 sh_offset: 37136 sh_size: 16 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 0 entry: 16 sh_name: .dtors sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10019120 sh_offset: 37152 sh_size: 16 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 0 entry: 17 sh_name: .jcr sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10019130 sh_offset: 37168 sh_size: 8 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 0 entry: 18 sh_name: .dynamic sh_type: SHT_DYNAMIC sh_flags:=20 sh_addr: 0x10019138 sh_offset: 37176 sh_size: 448 sh_link: 5 sh_info: 0 sh_addralign: 8 sh_entsize: 16 entry: 19 sh_name: .opd sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x100192f8 sh_offset: 37624 sh_size: 1128 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 0 entry: 20 sh_name: .got sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10019800 sh_offset: 38912 sh_size: 152 sh_link: 0 sh_info: 0 sh_addralign: 256 sh_entsize: 8 entry: 21 sh_name: .plt sh_type: SHT_NOBITS sh_flags:=20 sh_addr: 0x10019898 sh_offset: 39064 sh_size: 1800 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 24 entry: 22 sh_name: .data sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0x10019fa0 sh_offset: 40864 sh_size: 80 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 0 entry: 23 sh_name: .bss sh_type: SHT_NOBITS sh_flags:=20 sh_addr: 0x10019ff0 sh_offset: 40944 sh_size: 520 sh_link: 0 sh_info: 0 sh_addralign: 8 sh_entsize: 0 entry: 24 sh_name: .comment sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0 sh_offset: 40944 sh_size: 693 sh_link: 0 sh_info: 0 sh_addralign: 1 sh_entsize: 1 entry: 25 sh_name: .gnu_debuglink sh_type: SHT_PROGBITS sh_flags:=20 sh_addr: 0 sh_offset: 41640 sh_size: 16 sh_link: 0 sh_info: 0 sh_addralign: 4 sh_entsize: 0 entry: 26 sh_name: .shstrtab sh_type: SHT_STRTAB sh_flags:=20 sh_addr: 0 sh_offset: 41656 sh_size: 208 sh_link: 0 sh_info: 0 sh_addralign: 1 sh_entsize: 0 As for objdump on the same file (section one less than elfdump listed, no empty sh_name section listed): # objdump -ph /bin/ls | less /bin/ls: file format elf64-powerpc-freebsd Program Header: PHDR off 0x0000000000000040 vaddr 0x0000000010000040 paddr = 0x0000000010000040 align 2**3 filesz 0x0000000000000188 memsz 0x0000000000000188 flags r-- INTERP off 0x00000000000001c8 vaddr 0x00000000100001c8 paddr = 0x00000000100001c8 align 2**0 filesz 0x0000000000000015 memsz 0x0000000000000015 flags r-- LOAD off 0x0000000000000000 vaddr 0x0000000010000000 paddr = 0x0000000010000000 align 2**16 filesz 0x000000000000910c memsz 0x000000000000910c flags r-x LOAD off 0x0000000000009110 vaddr 0x0000000010019110 paddr = 0x0000000010019110 align 2**16 filesz 0x0000000000000ee0 memsz 0x00000000000010e8 flags rw- DYNAMIC off 0x0000000000009138 vaddr 0x0000000010019138 paddr = 0x0000000010019138 align 2**3 filesz 0x00000000000001c0 memsz 0x00000000000001c0 flags rw- NOTE off 0x00000000000001e0 vaddr 0x00000000100001e0 paddr = 0x00000000100001e0 align 2**2 filesz 0x0000000000000030 memsz 0x0000000000000030 flags r-- STACK off 0x0000000000000000 vaddr 0x0000000000000000 paddr = 0x0000000000000000 align 2**4 filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw- Dynamic Section: NEEDED libutil.so.9 NEEDED libncursesw.so.8 NEEDED libc.so.7 INIT 0x0000000010019328 FINI 0x0000000010019340 HASH 0x0000000010000210 STRTAB 0x0000000010000d00 SYMTAB 0x0000000010000490 STRSZ 0x000000000000035a SYMENT 0x0000000000000018 DEBUG 0x0000000000000000 PLTGOT 0x0000000010019898 PLTRELSZ 0x00000000000006f0 PLTREL 0x0000000000000007 JMPREL 0x00000000100012f8 0x70000000 0x00000000100089b4 RELA 0x0000000010001160 RELASZ 0x0000000000000198 RELAENT 0x0000000000000018 VERNEED 0x0000000010001110 VERNEEDNUM 0x0000000000000001 VERSYM 0x000000001000105a Version References: required from libc.so.7: 0x077a28b3 0x00 05 FBSD_1.3 0x077a28b1 0x00 04 FBSD_1.1 0x077a28b5 0x00 03 FBSD_1.5 0x077a28b0 0x00 02 FBSD_1.0 private flags =3D 0x1: [abiv1] Sections: Idx Name Size VMA LMA File off = Algn 0 .interp 00000015 00000000100001c8 00000000100001c8 000001c8 = 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 1 .note.tag 00000030 00000000100001e0 00000000100001e0 000001e0 = 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 2 .hash 0000027c 0000000010000210 0000000010000210 00000210 = 2**3 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .dynsym 00000870 0000000010000490 0000000010000490 00000490 = 2**3 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .dynstr 0000035a 0000000010000d00 0000000010000d00 00000d00 = 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 .gnu.version 000000b4 000000001000105a 000000001000105a 0000105a = 2**1 CONTENTS, ALLOC, LOAD, READONLY, DATA 6 .gnu.version_r 00000050 0000000010001110 0000000010001110 = 00001110 2**3 CONTENTS, ALLOC, LOAD, READONLY, DATA 7 .rela.dyn 00000198 0000000010001160 0000000010001160 00001160 = 2**3 CONTENTS, ALLOC, LOAD, READONLY, DATA 8 .rela.plt 000006f0 00000000100012f8 00000000100012f8 000012f8 = 2**3 CONTENTS, ALLOC, LOAD, READONLY, DATA 9 .init 0000002c 00000000100019f0 00000000100019f0 000019f0 = 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 10 .text 00007204 0000000010001a20 0000000010001a20 00001a20 = 2**5 CONTENTS, ALLOC, LOAD, READONLY, CODE 11 .fini 00000024 0000000010008c30 0000000010008c30 00008c30 = 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 12 .rodata 000004b0 0000000010008c58 0000000010008c58 00008c58 = 2**3 CONTENTS, ALLOC, LOAD, READONLY, DATA 13 .eh_frame 00000004 0000000010009108 0000000010009108 00009108 = 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 14 .ctors 00000010 0000000010019110 0000000010019110 00009110 = 2**3 CONTENTS, ALLOC, LOAD, DATA 15 .dtors 00000010 0000000010019120 0000000010019120 00009120 = 2**3 CONTENTS, ALLOC, LOAD, DATA 16 .jcr 00000008 0000000010019130 0000000010019130 00009130 = 2**3 CONTENTS, ALLOC, LOAD, DATA 17 .dynamic 000001c0 0000000010019138 0000000010019138 00009138 = 2**3 CONTENTS, ALLOC, LOAD, DATA 18 .opd 00000468 00000000100192f8 00000000100192f8 000092f8 = 2**3 CONTENTS, ALLOC, LOAD, DATA 19 .got 00000098 0000000010019800 0000000010019800 00009800 = 2**8 CONTENTS, ALLOC, LOAD, DATA 20 .plt 00000708 0000000010019898 0000000010019898 00009898 = 2**3 ALLOC 21 .data 00000050 0000000010019fa0 0000000010019fa0 00009fa0 = 2**3 CONTENTS, ALLOC, LOAD, DATA 22 .bss 00000208 0000000010019ff0 0000000010019ff0 00009ff0 = 2**3 ALLOC 23 .comment 000002b5 0000000000000000 0000000000000000 00009ff0 = 2**0 CONTENTS, READONLY 24 .gnu_debuglink 00000010 0000000000000000 0000000000000000 = 0000a2a8 2**2 CONTENTS, READONLY =3D=3D=3D Mark Millard marklmi at yahoo.com ( dsl-only.net went away in early 2018-Mar)