From owner-p4-projects@FreeBSD.ORG Mon Sep 2 12:04:18 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 28043DC0; Mon, 2 Sep 2013 12:04:18 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DF524DBE for ; Mon, 2 Sep 2013 12:04:17 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id CA4DE29E5 for ; Mon, 2 Sep 2013 12:04:17 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r82C4HcZ047245 for ; Mon, 2 Sep 2013 12:04:17 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r82C4Hf0047242 for perforce@freebsd.org; Mon, 2 Sep 2013 12:04:17 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Mon, 2 Sep 2013 12:04:17 GMT Message-Id: <201309021204.r82C4Hf0047242@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 553396 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Sep 2013 12:04:18 -0000 http://p4web.freebsd.org/@@553396?ac=10 Change 553396 by rwatson@rwatson_cinnamon_macosx on 2013/09/02 12:03:58 When Philip revised the C run-time code to adjust stack alignment for CHERI capabilities, he merged a larger refactoring of assembly vs C code for __start(). It looks like a line adjusting the stack location was omitted, causing statically linked binaries to accidentally overwrite the argv[] pointer array when saving $gp, so restore that stack-pointer modification. This bug caused gcc to segfault immediately on start. I've not spelunked enough to understand why dynamically linked binaries worked -- either they use a different code path, or something else (less visibly harmful) is overwritten in memory instead. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/lib/csu/mips/crt1_s.S#2 edit Differences ... ==== //depot/projects/ctsrd/cheribsd/src/lib/csu/mips/crt1_s.S#2 (text+ko) ==== @@ -57,6 +57,7 @@ #if defined(__ABICALLS__) && (defined(__mips_o32) || defined(__mips_o64)) SETUP_GP #endif + PTR_ADDU sp, sp, -CALLFRAME_SIZ REG_S ra, CALLFRAME_RA(sp) #if defined(__ABICALLS__) #if defined(__mips_o32) || defined(__mips_o64)