From owner-freebsd-ppc@freebsd.org Fri Jun 7 02:41:21 2019 Return-Path: Delivered-To: freebsd-ppc@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 12B4E15C6407 for ; Fri, 7 Jun 2019 02:41:21 +0000 (UTC) (envelope-from chmeeedalf@gmail.com) Received: from mail-lj1-x241.google.com (mail-lj1-x241.google.com [IPv6:2a00:1450:4864:20::241]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E041D90EC0 for ; Fri, 7 Jun 2019 02:41:19 +0000 (UTC) (envelope-from chmeeedalf@gmail.com) Received: by mail-lj1-x241.google.com with SMTP id k18so360913ljc.11 for ; Thu, 06 Jun 2019 19:41:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alumni-cwru-edu.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=lxx9X12wr6SFQ1dBUqofZZSSFJYnJECxQf8egrIkSg4=; b=kBhz+98703jETyOJxShRfMjlVbFb1wH8onZ9817lwYZf0I4OGsF3DVN6p4dFDNsNV9 l3R+/FqJcct4F41R52Ff9LBncXEI9Nh8hLGikGT/SXkX7y+VZvGDwxaX9W1G67mLPRuX Tih0eGQ1op5ngHSwghbI97EDwAraIeY7PbfL6jiU5xKPe7NQ8uTcYr7Brb6Q/74SaB/m lVAOIxbDy3RifpXXgJjZ8fjPGTdxDOlhVpnFyA/f93nBRYK8lLH6tfNCr+WwrMWzhHsb sJYZabOVuMJfA8uc9Pdf6azHA+eGBUbP41OY8dna4Clc9p6v1Xnch61ZCqtjfPPa8rGp 5/3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=lxx9X12wr6SFQ1dBUqofZZSSFJYnJECxQf8egrIkSg4=; b=fKopSNzyt5TvLPkyMGE30rFOO2AqzBemol7pBsdCSqDNmf2eWksevX2u9McPg6+071 c4Uo4fzD++GIR3dGudt2Q0rMkAbJG8A9HiywCYh6HKRNmYaIwg4ENL38S0KhAY+uM+1w XYneXICtGH8o/37ZV84hBnPB+K9KkfK8Ksri36AaCWISuNTEJUbYtuDmwJm+whd+WvlK 1b++IBh0H5oDQjy2ZCTjaMC8jnBFLPDmYBXHHrgkYkoXR5+QZkCQ63fMKNbGHEhNkzx6 /Z+QYlzTdd+Svq+8nwW6hWbTk1xgDczRv0FR48dELeUnv29U9zZzWGa22BzTDN3mWwDM rz1w== X-Gm-Message-State: APjAAAX95rZMBxDS7hAyATuzPhVwjsXmkvPzP+QNyrPa0y9+NKWUxF7S ITvybrgBE/cNozx/RhufEjP6bMNbDUCD0SXBE/8= X-Google-Smtp-Source: APXvYqxCsPJw8wTaPWrQ5HBSlTXZuNDkvU5HpybyMEOQMIZ7Df2jJmpVCLKihVomXst+OPf8ynJxiJsKR+R9j4O9/lo= X-Received: by 2002:a2e:3912:: with SMTP id g18mr18037624lja.38.1559875277769; Thu, 06 Jun 2019 19:41:17 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Justin Hibbits Date: Thu, 6 Jun 2019 21:41:06 -0500 Message-ID: Subject: Re: 32-bit powerpc's elf_reloc_internal has no support for R_PPC_JMP_SLOT but clang with devel/powerpc64-binutils uses such for building kernel modules To: Mark Millard Cc: FreeBSD PowerPC ML Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: E041D90EC0 X-Spamd-Bar: --- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=alumni-cwru-edu.20150623.gappssmtp.com header.s=20150623 header.b=kBhz+987; spf=pass (mx1.freebsd.org: domain of chmeeedalf@gmail.com designates 2a00:1450:4864:20::241 as permitted sender) smtp.mailfrom=chmeeedalf@gmail.com X-Spamd-Result: default: False [-3.15 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-0.99)[-0.986,0]; R_DKIM_ALLOW(-0.20)[alumni-cwru-edu.20150623.gappssmtp.com:s=20150623]; FROM_HAS_DN(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; PREVIOUSLY_DELIVERED(0.00)[freebsd-ppc@freebsd.org]; DMARC_NA(0.00)[cwru.edu]; NEURAL_HAM_SHORT(-0.54)[-0.539,0]; TO_MATCH_ENVRCPT_SOME(0.00)[]; TO_DN_ALL(0.00)[]; MX_GOOD(-0.01)[cached: alt3.gmail-smtp-in.l.google.com]; DKIM_TRACE(0.00)[alumni-cwru-edu.20150623.gappssmtp.com:+]; RCPT_COUNT_TWO(0.00)[2]; RCVD_IN_DNSWL_NONE(0.00)[1.4.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.4.6.8.4.0.5.4.1.0.0.a.2.list.dnswl.org : 127.0.5.0]; RCVD_TLS_LAST(0.00)[]; FORGED_SENDER(0.30)[jrh29@alumni.cwru.edu,chmeeedalf@gmail.com]; FREEMAIL_TO(0.00)[yahoo.com]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; FROM_NEQ_ENVFROM(0.00)[jrh29@alumni.cwru.edu,chmeeedalf@gmail.com]; IP_SCORE(-0.42)[ip: (2.61), ipnet: 2a00:1450::/32(-2.33), asn: 15169(-2.30), country: US(-0.06)]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: freebsd-ppc@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Porting FreeBSD to the PowerPC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Jun 2019 02:41:21 -0000 On Thu, Jun 6, 2019 at 8:06 PM Mark Millard via freebsd-ppc wrote: > > > /usr/src/sys/powerpc/powerpc/elf64_machdep.c has: > > static int > elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, > int type, int local, elf_lookup_fn lookup) > { > . . . > case R_PPC_JMP_SLOT: /* function descriptor copy */ > lookup(lf, symidx, 1, &addr); > #if !defined(_CALL_ELF) || _CALL_ELF == 1 > memcpy(where, (Elf_Addr *)addr, 3*sizeof(Elf_Addr)); > #else > *where = addr; > #endif > __asm __volatile("dcbst 0,%0; sync" :: "r"(where) : "memory"); > break; > > . . . > > But /usr/src/sys/powerpc/powerpc/elf32_machdep.c 's elf_reloc_internal > does not have any R_PPC_JMP_SLOT case in its code. > > Yet, from using clang as the system compiler for targeting 32-bit powerpc, > readelf -asW /boot/kernel/if_gem.ko shows the likes of: > > Relocation section with addend (.rela.plt): > r_offset r_info r_type st_value st_name + r_addend > 00018328 00000215 R_PPC_JMP_SLOT 00000000 if_maddr_runlock + 0 > 00018330 00000315 R_PPC_JMP_SLOT 00000000 mii_mediachg + 0 > 00018338 00000415 R_PPC_JMP_SLOT 00000000 m_freem + 0 > 00018340 00000515 R_PPC_JMP_SLOT 00000000 device_get_softc + 0 > 00018348 00000715 R_PPC_JMP_SLOT 00000000 device_set_desc + 0 > 00018350 00000815 R_PPC_JMP_SLOT 00000000 printf + 0 > 00018358 00000b15 R_PPC_JMP_SLOT 00000000 ether_crc32_le + 0 > 00018360 00000e15 R_PPC_JMP_SLOT 00000000 bpf_mtap + 0 > . . . > > # file /boot/kernel/if_gem.ko > /boot/kernel/if_gem.ko: ELF 32-bit MSB shared object, PowerPC or cisco 4500, version 1 (FreeBSD), dynamically linked, BuildID[sha1]=013a358835fddcd6bbb82d35a6ce36243eccb743, not stripped > > So, naturally, module loading such (manual or automatic) > is a problem for the 32-bit powerpc context. > > The context was head -r347549 . > > === > Mark Millard > marklmi at yahoo.com > ( dsl-only.net went > away in early 2018-Mar) Can you try this patch? Untested, just compiled. It's essentially a copy of the ELFv2 part of the elf64_machdep bit you posted above. - Justin diff --git a/sys/powerpc/powerpc/elf32_machdep.c b/sys/powerpc/powerpc/elf32_machdep.c index 11c14671d0b..219a61363cd 100644 --- a/sys/powerpc/powerpc/elf32_machdep.c +++ b/sys/powerpc/powerpc/elf32_machdep.c @@ -295,6 +295,12 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, *where = elf_relocaddr(lf, relocbase + addend); break; + case R_PPC_JMP_SLOT: + lookup(lf, symidx, 1, &addr); + *where = addr; + __asm __volatile("dcbst 0,%0; sync" :: "r"(where) : "memory"); + break; + default: printf("kldload: unexpected relocation type %d\n", (int) rtype);