From patchwork Tue May 14 13:42:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Edelsohn X-Patchwork-Id: 1099485 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-500640-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="pq3VQmg6"; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Frk+ZO8K"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 453Jmb1kGVz9s3q for ; Tue, 14 May 2019 23:43:24 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:cc:content-type; q=dns; s=default; b=QFsHRt7+DwzD0PSc1tluGsUmYERpymyQrPWZuri3l7z miWln6G63QLbXsVogQaEk/1U895/s8am6vpKDdE5K75KSXTr+UJe+cWWJ7qaa9qo mJ7vrLqHtc/ZAFn63Go9aJf/QLo0Q9XZDbnd8CWAqd0Y44ts93Ezxs2HtgigybMU = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:from:date:message-id:subject:to:cc:content-type; s=default; bh=ni+5k1LA+f60dqv2J9ENY+Wb/Sw=; b=pq3VQmg6ECFgyO6vA 0Q10pgJsdBkSdhJfEsuJAWwJc+1cVEUJulCd5nkSe0pd6L33gt7iZdtFBJOUWIbk 15jDBreD/n2YJ/YbklaUnOaniJxjCpRSTlVsP9BbwcXM7JcsM27YcBaL3Rk8Xnzi tzavxo6nZN+2Sq1NnPU0O8L9Rc= Received: (qmail 90876 invoked by alias); 14 May 2019 13:43:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 90868 invoked by uid 89); 14 May 2019 13:43:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-6.4 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-wr1-f65.google.com Received: from mail-wr1-f65.google.com (HELO mail-wr1-f65.google.com) (209.85.221.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 14 May 2019 13:43:15 +0000 Received: by mail-wr1-f65.google.com with SMTP id b18so9311226wrq.12 for ; Tue, 14 May 2019 06:43:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=a0Vwg+JFKaWhmMC9sU6xen84Q7KSyQ8O13R7uQoNwbk=; b=Frk+ZO8KYb+7Tn/8p+Qsu4plb4KEzRUOtPy3WGC1jLRpznGEO6LqWIa/UXJIFkYrRD m3asolAOW0dxY/vmaeMzlTFOTlK/VIo788vhX7VmJLEK6EdRD3kDu16PzTYYADif2JIR iFSgC8srpZvRfAlupemOPKRRDoL/5lPQFY2G3sSJ1qC9yJxfNCDvZfAmQrBI6YeGQd9Z K4Axsa/FOl/pKyBqSeO2m8NAaoT6HKktsBG2+ln4OzU+XocU3r80kw7o26Sb1bDM05Q1 xcmMZeDd6Pj4EJpGz2O+5ITtY48ijE5lBari6m8YBj95O5dZ249iimiyBSgl4sEHJZUo 5lMg== MIME-Version: 1.0 From: David Edelsohn Date: Tue, 14 May 2019 09:42:58 -0400 Message-ID: Subject: [PATCH] GCC 8 Backports for AIX To: Jakub Jelinek Cc: GCC Patches , Segher Boessenkool I would like to backport two AIX-specific patches to GCC 8. These both fix bugs that generate wrong code on AIX. 1) XCOFF private read only data section 2) Follow AIX ABI to not pass FP structures in FPRs. These patches have been on trunk / GCC 9 for months. Bootstrapped gcc-8-branch on powerpc-ibm-aix7.2.0.0. Is this okay? Thanks, David * xcoffout.h (xcoff_private_rodata_section_name): Declare. * xcoffout.c (xcoff_private_rodata_section_name): Define. * config/rs6000/rs6000.c (rs6000_xcoff_asm_init_sections): Create read_only_private_data_section using xcoff_private_rodata_section_name. (rs6000_xcoff_file_start): Generate xcoff_private_rodata_section_name. PR target/61976 * config/rs6000/rs6000.c (rs6000_function_arg): Don't pass aggregates in FPRs on AIX. Ensure type is non-NULL. (rs6000_arg_partial_bytes): Same. Index: xcoffout.c =================================================================== --- xcoffout.c (revision 271131) +++ xcoffout.c (working copy) @@ -64,6 +64,7 @@ char *xcoff_bss_section_name; char *xcoff_private_data_section_name; +char *xcoff_private_rodata_section_name; char *xcoff_tls_data_section_name; char *xcoff_tbss_section_name; char *xcoff_read_only_section_name; Index: xcoffout.h =================================================================== --- xcoffout.h (revision 271131) +++ xcoffout.h (working copy) @@ -127,6 +127,7 @@ extern char *xcoff_bss_section_name; extern char *xcoff_private_data_section_name; +extern char *xcoff_private_rodata_section_name; extern char *xcoff_tls_data_section_name; extern char *xcoff_tbss_section_name; extern char *xcoff_read_only_section_name; Index: config/rs6000/rs6000.c =================================================================== --- config/rs6000/rs6000.c (revision 271131) +++ config/rs6000/rs6000.c (working copy) @@ -12615,7 +12615,9 @@ rs6000_function_arg (cumulative_args_t cum_v, mach if (elt_mode == TDmode && (cum->fregno % 2) == 1) cum->fregno++; - if (USE_FP_FOR_ARG_P (cum, elt_mode)) + if (USE_FP_FOR_ARG_P (cum, elt_mode) + && !(TARGET_AIX && !TARGET_ELF + && type != NULL && AGGREGATE_TYPE_P (type))) { rtx rvec[GP_ARG_NUM_REG + AGGR_ARG_NUM_REG + 1]; rtx r, off; @@ -12751,7 +12753,9 @@ rs6000_arg_partial_bytes (cumulative_args_t cum_v, align_words = rs6000_parm_start (mode, type, cum->words); - if (USE_FP_FOR_ARG_P (cum, elt_mode)) + if (USE_FP_FOR_ARG_P (cum, elt_mode) + && !(TARGET_AIX && !TARGET_ELF + && type != NULL && AGGREGATE_TYPE_P (type))) { unsigned long n_fpreg = (GET_MODE_SIZE (elt_mode) + 7) >> 3; @@ -34218,6 +34222,10 @@ rs6000_xcoff_asm_init_sections (void) rs6000_xcoff_output_readwrite_section_asm_op, &xcoff_private_data_section_name); + read_only_private_data_section + = get_unnamed_section (0, rs6000_xcoff_output_readonly_section_asm_op, + &xcoff_private_rodata_section_name); + tls_data_section = get_unnamed_section (SECTION_TLS, rs6000_xcoff_output_tls_section_asm_op, @@ -34228,10 +34236,6 @@ rs6000_xcoff_asm_init_sections (void) rs6000_xcoff_output_tls_section_asm_op, &xcoff_private_data_section_name); - read_only_private_data_section - = get_unnamed_section (0, rs6000_xcoff_output_readonly_section_asm_op, - &xcoff_private_data_section_name); - toc_section = get_unnamed_section (0, rs6000_xcoff_output_toc_section_asm_op, NULL); @@ -34412,6 +34416,8 @@ rs6000_xcoff_file_start (void) main_input_filename, ".bss_"); rs6000_gen_section_name (&xcoff_private_data_section_name, main_input_filename, ".rw_"); + rs6000_gen_section_name (&xcoff_private_rodata_section_name, + main_input_filename, ".rop_"); rs6000_gen_section_name (&xcoff_read_only_section_name, main_input_filename, ".ro_"); rs6000_gen_section_name (&xcoff_tls_data_section_name,