From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by sourceware.org (Postfix) with ESMTPS id CF695386FC2D for ; Tue, 22 Jun 2021 23:57:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CF695386FC2D Received: by mail-pf1-x432.google.com with SMTP id y4so816861pfi.9 for ; Tue, 22 Jun 2021 16:57:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=djBSsHGYSG2abg7AnGk9dqdDGolnYXql39rRQe52Kns=; b=p8jMTzaAFoUU79DCuQZjh7yujGsTIJXSb5lp8hb5uYVLx5UXjyMJdz/vB6VqGmmfg6 qVM+NdTOyp//mzpa7V3yWsfePt0qdoMhGXaiu0eYP8CIpSyg1qqqk48j3hEDxTkuiuJK rWXH27rp6asT2NpFpy8yjo2eG7WbRcq3xSewMsM11MFhWh3xygnWnA1r3sXdFG0+Xcgj WFFXSQX0rZQdbMfbd8RtfOqnxDY1lCkuUBX01WmIi5XfzwQBaRvES8ab/tVHpJrXM4dN sikXLbeWhegcQavaevq6rDpbd277jQzd9zHOkbHCrfjWhR5EVetruQcCTOHRqMuGm4MO sIqA== X-Gm-Message-State: AOAM532k2B2H9LILgZaD7R8qgRqwKRh2WevFX3RynjjpI8/yb+br3Eap GUgAWDn/kGTJ1jx2UenAfS4= X-Google-Smtp-Source: ABdhPJxqictLSHBOBkYwSKO6A14TMO5EXzM/cwAMKv1Q3p2ClvQRJQEsVcBzCY8S1gBf43edpvz0xg== X-Received: by 2002:a63:1d2:: with SMTP id 201mr1088945pgb.3.1624406236959; Tue, 22 Jun 2021 16:57:16 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([172.56.39.115]) by smtp.gmail.com with ESMTPSA id i6sm3298500pjg.31.2021.06.22.16.57.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Jun 2021 16:57:16 -0700 (PDT) Received: from gnu-cfl-2.. (localhost [IPv6:::1]) by gnu-cfl-2.localdomain (Postfix) with ESMTP id 7121CC0366; Tue, 22 Jun 2021 16:57:15 -0700 (PDT) From: "H.J. Lu" To: binutils@sourceware.org Cc: Florian Weimer , Alan Modra , Nick Clifton , Richard Earnshaw Subject: [PATCH v2 1/2] elf: Add GNU_PROPERTY_1_NEEDED Date: Tue, 22 Jun 2021 16:57:14 -0700 Message-Id: <20210622235715.2813205-2-hjl.tools@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210622235715.2813205-1-hjl.tools@gmail.com> References: <20210622235715.2813205-1-hjl.tools@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3032.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Jun 2021 23:57:19 -0000 Add GNU_PROPERTY_1_NEEDED: #define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO to indicate the needed properties by the object file. Add GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS: #define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) to indicate that the object file requires canonical function pointers and cannot be used with copy relocation. binutils/ * readelf.c (decode_1_needed): New. (print_gnu_property_note): Handle GNU_PROPERTY_1_NEEDED. include/ * elf/common.h (GNU_PROPERTY_1_NEEDED): New. (GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS): Likewise. ld/ * testsuite/ld-elf/property-1_needed-1a.d: New file. * testsuite/ld-elf/property-1_needed-1.s: Likewise. --- binutils/readelf.c | 39 ++++++++++++++++++++++ include/elf/common.h | 7 ++++ ld/testsuite/ld-elf/property-1_needed-1.s | 15 +++++++++ ld/testsuite/ld-elf/property-1_needed-1a.d | 17 ++++++++++ 4 files changed, 78 insertions(+) create mode 100644 ld/testsuite/ld-elf/property-1_needed-1.s create mode 100644 ld/testsuite/ld-elf/property-1_needed-1a.d diff --git a/binutils/readelf.c b/binutils/readelf.c index f7c64329f37..0c564a75248 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -19319,6 +19319,28 @@ decode_aarch64_feature_1_and (unsigned int bitmask) } } +static void +decode_1_needed (unsigned int bitmask) +{ + while (bitmask) + { + unsigned int bit = bitmask & (- bitmask); + + bitmask &= ~ bit; + switch (bit) + { + case GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS: + printf ("indirect external access"); + break; + default: + printf (_(""), bit); + break; + } + if (bitmask) + printf (", "); + } +} + static void print_gnu_property_note (Filedata * filedata, Elf_Internal_Note * pnote) { @@ -19512,6 +19534,23 @@ print_gnu_property_note (Filedata * filedata, Elf_Internal_Note * pnote) || (type >= GNU_PROPERTY_UINT32_OR_LO && type <= GNU_PROPERTY_UINT32_OR_HI)) { + switch (type) + { + case GNU_PROPERTY_1_NEEDED: + if (datasz != 4) + printf (_("1_needed: "), + datasz); + else + { + unsigned int bitmask = byte_get (ptr, 4); + printf ("1_needed: "); + decode_1_needed (bitmask); + } + goto next; + + default: + break; + } if (type <= GNU_PROPERTY_UINT32_AND_HI) printf (_("UINT32_AND (%#x): "), type); else diff --git a/include/elf/common.h b/include/elf/common.h index 0cca28673dd..0d381f0d27b 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -792,6 +792,13 @@ #define GNU_PROPERTY_UINT32_OR_LO 0xb0008000 #define GNU_PROPERTY_UINT32_OR_HI 0xb000ffff +/* The needed properties by the object file. */ +#define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO + +/* Set if the object file requires canonical function pointers and + cannot be used with copy relocation. */ +#define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) + /* Processor-specific semantics, lo */ #define GNU_PROPERTY_LOPROC 0xc0000000 /* Processor-specific semantics, hi */ diff --git a/ld/testsuite/ld-elf/property-1_needed-1.s b/ld/testsuite/ld-elf/property-1_needed-1.s new file mode 100644 index 00000000000..5d5cdc87744 --- /dev/null +++ b/ld/testsuite/ld-elf/property-1_needed-1.s @@ -0,0 +1,15 @@ + .section ".note.gnu.property", "a" + .p2align ALIGN + .long 1f - 0f /* name length */ + .long 5f - 2f /* data length */ + .long 5 /* note type */ +0: .asciz "GNU" /* vendor name */ +1: + .p2align ALIGN +2: .long 0xb0008000 /* pr_type. */ + .long 4f - 3f /* pr_datasz. */ +3: + .long 0x3 +4: + .p2align ALIGN +5: diff --git a/ld/testsuite/ld-elf/property-1_needed-1a.d b/ld/testsuite/ld-elf/property-1_needed-1a.d new file mode 100644 index 00000000000..d994e6edece --- /dev/null +++ b/ld/testsuite/ld-elf/property-1_needed-1a.d @@ -0,0 +1,17 @@ +#source: empty.s +#source: property-1_needed-1.s +#as: +#ld: -shared +#readelf: -n +#xfail: ![check_shared_lib_support] +#notarget: am33_2.0-*-* hppa*-*-hpux* mn10300-*-* +# Assembly source file for the HPPA assembler is renamed and modifed by +# sed. mn10300 has relocations in .note.gnu.property section which +# elf_parse_notes doesn't support. + +#... +Displaying notes found in: .note.gnu.property +[ ]+Owner[ ]+Data size[ ]+Description + GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0 + Properties: 1_needed: indirect external access, +#pass -- 2.31.1