From patchwork Sun Jul 21 18:26:02 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Polacek X-Patchwork-Id: 260540 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "localhost", Issuer "www.qmailtoaster.com" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 29F722C00AC for ; Mon, 22 Jul 2013 04:26:21 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; q=dns; s=default; b=FWYdSb5TBG4IIDdKY BqXEDteEwLCU1HQNPqKcTf8IVdE4nH+31qzQEAm570QQtXmpMw3dUSum90dlRYHE 2yTRtuSURQHnAvhNJ4/OF1ryxpXVuRCf3slX6/pKUBEFOCQbrk0Ov+nuWk0yM0GL cuL8YPcfc9SGls9qkdu+QBx+wk= 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:date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=default; bh=zApLs5Fe0Lh6SM/cPrpRkSp qXl0=; b=jI1i3MThrJC4zwiJIZKjMaKuXZvgwUNczJ9ppMy8m38pjyCTOZoRrEf ZYm1Sw3DGmMb2GUr/4dJu80JfvYqXnUmOzpPPqQf3ViOBDbMUUv4WPrjoT8t4nOs KLhErOwFYoeCwhhM1FQh8N5gTW+Lqg5peUqh74KP4Eh1MDM3ejTM= Received: (qmail 329 invoked by alias); 21 Jul 2013 18:26:15 -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 304 invoked by uid 89); 21 Jul 2013 18:26:15 -0000 X-Spam-SWARE-Status: No, score=-4.3 required=5.0 tests=AWL, BAYES_50, RCVD_IN_HOSTKARMA_W, RCVD_IN_HOSTKARMA_WL, RDNS_NONE, SPF_HELO_PASS, SPF_PASS autolearn=no version=3.3.1 Received: from Unknown (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Sun, 21 Jul 2013 18:26:14 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r6LIQ7Mb010511 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 21 Jul 2013 14:26:07 -0400 Received: from redhat.com (ovpn-116-37.ams2.redhat.com [10.36.116.37]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r6LIQ3bq016557 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Sun, 21 Jul 2013 14:26:05 -0400 Date: Sun, 21 Jul 2013 20:26:02 +0200 From: Marek Polacek To: Jason Merrill Cc: Jakub Jelinek , GCC Patches Subject: Re: [ubsan] Add libcall arguments Message-ID: <20130721182601.GC14359@redhat.com> References: <20130705140431.GB21800@redhat.com> <51E84650.5020708@redhat.com> <20130719184530.GE3169@redhat.com> <20130719185042.GY23578@laptop.redhat.com> <20130719190125.GG3169@redhat.com> <51EA2868.2050701@redhat.com> <20130720081955.GI3169@redhat.com> <20130720142714.GE23578@laptop.redhat.com> <51EB289E.9000909@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <51EB289E.9000909@redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) On Sat, Jul 20, 2013 at 08:17:34PM -0400, Jason Merrill wrote: > On 07/20/2013 10:27 AM, Jakub Jelinek wrote: > >So, the middle-end can only use > >some other type, say build_nonstandard_integer_type (POINTER_SIZE, 1); > >which often will be the same type as uintptr_type_node, but perhaps not on > >all targets. It could be worth to create such a type in tree.c and stick it > >into global trees and then just use, but right now all the uses are just in > >asan.c and ubsan.c. > > Let's do that; I expect it will be useful in other situations, too. Ok, here's a patch for that. Does the name sound reasonable? 2013-07-21 Marek Polacek * tree.h (enum tree_index): Add TI_POINTER_SIZED_TYPE. (pointer_sized_type_node): Define. * tree.c (build_common_tree_nodes): Initialize pointer_sized_type_node. * ubsan.c (ubsan_encode_value): Use pointer_sized_type_node instead calling uptr_type. (uptr_type): Remove function. * asan.c (asan_global_struct): Use pointer_sized_type_node instead calling build_nonstandard_integer_type. (initialize_sanitizer_builtins): Likewise. (asan_finish_file): Likewise. Marek --- gcc/tree.c.mp 2013-07-21 19:54:35.416986756 +0200 +++ gcc/tree.c 2013-07-21 19:56:58.347562787 +0200 @@ -9638,6 +9638,8 @@ build_common_tree_nodes (bool signed_cha = build_pointer_type (build_type_variant (void_type_node, 1, 0)); fileptr_type_node = ptr_type_node; + pointer_sized_type_node = build_nonstandard_integer_type (POINTER_SIZE, 1); + float_type_node = make_node (REAL_TYPE); TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE; layout_type (float_type_node); --- gcc/ubsan.c.mp 2013-07-21 20:04:59.469653493 +0200 +++ gcc/ubsan.c 2013-07-21 20:07:00.227178083 +0200 @@ -123,14 +123,6 @@ ubsan_typedesc_new (tree type, tree decl return desc; } -/* Build the ubsan uptr type. */ - -static tree -uptr_type (void) -{ - return build_nonstandard_integer_type (POINTER_SIZE, 1); -} - /* Helper routine, which encodes a value in the uptr type. Arguments with precision <= POINTER_SIZE are passed directly, the rest is passed by reference. T is a value we are to encode. */ @@ -143,7 +135,7 @@ ubsan_encode_value (tree t) { case INTEGER_TYPE: if (TYPE_PRECISION (type) <= POINTER_SIZE) - return fold_build1 (NOP_EXPR, uptr_type (), t); + return fold_build1 (NOP_EXPR, pointer_sized_type_node, t); else return build_fold_addr_expr (t); case REAL_TYPE: @@ -153,7 +145,7 @@ ubsan_encode_value (tree t) { tree itype = build_nonstandard_integer_type (bitsize, true); t = fold_build1 (VIEW_CONVERT_EXPR, itype, t); - return fold_convert (uptr_type (), t); + return fold_convert (pointer_sized_type_node, t); } else { --- gcc/tree.h.mp 2013-07-21 19:54:35.441986868 +0200 +++ gcc/tree.h 2013-07-21 19:56:05.128353854 +0200 @@ -4227,6 +4227,7 @@ enum tree_index TI_VA_LIST_FPR_COUNTER_FIELD, TI_BOOLEAN_TYPE, TI_FILEPTR_TYPE, + TI_POINTER_SIZED_TYPE, TI_DFLOAT32_TYPE, TI_DFLOAT64_TYPE, @@ -4383,6 +4384,7 @@ extern GTY(()) tree global_trees[TI_MAX] #define va_list_fpr_counter_field global_trees[TI_VA_LIST_FPR_COUNTER_FIELD] /* The C type `FILE *'. */ #define fileptr_type_node global_trees[TI_FILEPTR_TYPE] +#define pointer_sized_type_node global_trees[TI_POINTER_SIZED_TYPE] #define boolean_type_node global_trees[TI_BOOLEAN_TYPE] #define boolean_false_node global_trees[TI_BOOLEAN_FALSE] --- gcc/asan.c.mp 2013-07-21 20:07:15.013237456 +0200 +++ gcc/asan.c 2013-07-21 20:16:10.929376734 +0200 @@ -1954,7 +1954,7 @@ asan_global_struct (void) = build_decl (UNKNOWN_LOCATION, FIELD_DECL, get_identifier (field_names[i]), (i == 0 || i == 3) ? const_ptr_type_node - : build_nonstandard_integer_type (POINTER_SIZE, 1)); + : pointer_sized_type_node); DECL_CONTEXT (fields[i]) = ret; if (i) DECL_CHAIN (fields[i - 1]) = fields[i]; @@ -2039,8 +2039,7 @@ initialize_sanitizer_builtins (void) ptr_type_node, ptr_type_node, NULL_TREE); tree BT_FN_VOID_PTR_PTRMODE = build_function_type_list (void_type_node, ptr_type_node, - build_nonstandard_integer_type (POINTER_SIZE, - 1), NULL_TREE); + pointer_sized_type_node, NULL_TREE); tree BT_FN_VOID_INT = build_function_type_list (void_type_node, integer_type_node, NULL_TREE); tree BT_FN_BOOL_VPTR_PTR_IX_INT_INT[5]; @@ -2197,7 +2196,6 @@ asan_finish_file (void) if (gcount) { tree type = asan_global_struct (), var, ctor; - tree uptr = build_nonstandard_integer_type (POINTER_SIZE, 1); tree dtor_statements = NULL_TREE; vec *v; char buf[20]; @@ -2226,15 +2224,16 @@ asan_finish_file (void) varpool_assemble_decl (varpool_node_for_decl (var)); fn = builtin_decl_implicit (BUILT_IN_ASAN_REGISTER_GLOBALS); + tree gcount_tree = build_int_cst (pointer_sized_type_node, gcount); append_to_statement_list (build_call_expr (fn, 2, build_fold_addr_expr (var), - build_int_cst (uptr, gcount)), + gcount_tree), &asan_ctor_statements); fn = builtin_decl_implicit (BUILT_IN_ASAN_UNREGISTER_GLOBALS); append_to_statement_list (build_call_expr (fn, 2, build_fold_addr_expr (var), - build_int_cst (uptr, gcount)), + gcount_tree), &dtor_statements); cgraph_build_static_cdtor ('D', dtor_statements, MAX_RESERVED_INIT_PRIORITY - 1);