From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id AECB83858422 for ; Tue, 4 Jan 2022 06:52:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AECB83858422 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-204-ft3zirriNCuoJQOJoPqkKA-1; Tue, 04 Jan 2022 01:52:19 -0500 X-MC-Unique: ft3zirriNCuoJQOJoPqkKA-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 502EC1006AA4; Tue, 4 Jan 2022 06:52:18 +0000 (UTC) Received: from oldenburg.str.redhat.com (unknown [10.39.192.102]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5E64B108D3; Tue, 4 Jan 2022 06:52:17 +0000 (UTC) From: Florian Weimer To: Tom Kacvinsky via Gcc-help Subject: Re: How to tell if a ELF library/executable was built with -fpic versus -fPIC References: Date: Tue, 04 Jan 2022 07:52:15 +0100 In-Reply-To: (Tom Kacvinsky via Gcc-help's message of "Sun, 2 Jan 2022 11:06:31 -0500") Message-ID: <87mtkcgfhc.fsf@oldenburg.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-6.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-help@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-help mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Jan 2022 06:52:25 -0000 * Tom Kacvinsky via Gcc-help: > Perhaps this belongs on the binutils list, but I'd like to know how if an ELF > library/executable was built with -fpic versus -fPIC. I know each makes PIC > object code, with the difference being the size of the data model: > > -msmall-data (-fpic) > -mlarge-data (-fPIC) > > but I have some shared libraries I am linking against such that I don't know > which PIC option was used to build it. Is there an ELF header I can check? It depends on the the concrete target. For a fully linked executable, you'd have to disassemble it and check what is used for GOT access. For relocatable object files, you can look at the relocations. There should be an architecture-specific subset that can only handle a limited range, and that set corresponds to -fpic. There might be other options that affect the code model, with similar consequences as the -fpic/-fPIC distinction. Thanks, Florian