From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4864:20::543; helo=mail-pg1-x543.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D7A2D21A07A82 for ; Fri, 16 Nov 2018 14:56:05 -0800 (PST) Received: by mail-pg1-x543.google.com with SMTP id t13so2552408pgr.11 for ; Fri, 16 Nov 2018 14:56:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bWYrzs/H/xXXy3l94YVlE/28vHlvkFDHRz5MAuYyoVY=; b=hp+JFqDlehATgoUYepr1fyXtoErD2t5Pu9aUoX7zpoJMy8FDTnZYqqnXPZN1fjcTi7 it81qwxhTGqjFGl2WNOIhiQyXJUmWbMt7q3FmAcTtH2nuyuha8NEgeEhOvBnCCzJBJtK CtsFypc9M5SGqYNcbFg03fkrk8WkfSA+ZeuyM= 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; bh=bWYrzs/H/xXXy3l94YVlE/28vHlvkFDHRz5MAuYyoVY=; b=ZMJHGendrMXqZBCuP6RY41TKtqZltq3kTM3j6XSBuFH6qmt4ysIK1JKMhAklmAIO8c wHEUAeHrqUTkl/2lgt89bf59CsAD0aXBLsWcMRwGu0735apJ/lXSfikNgJdCV3nq9YQn AALL3qhLBEKiqv4PLQg2XsTEt06tDJR6mTlLM9xGTdbFstRKOsRCzo2ZQnPS4CrOVN+Q MVDXsW7us96ZhbzJPJ4Z2pW3JlgpL+VJ9d50wAJj1w2itsVDJr4LmVVkCfv+zQsAyUKW WzuuLOcvHc2JWLUiJdOb3KLD07y+VtZYCuVDli8s3RrfTWU4cobNT4CT6lFDK5OUQCSt lAuw== X-Gm-Message-State: AGRZ1gKSRgxIKi9g/4XFrZMwOpgcRMAMG8c+3F/z0WeI5PStRtHdEKAP qfv5Fd712S7irqeMGKF4dt/yCVtqerGLCA== X-Google-Smtp-Source: AJdET5dy6GonEnWJ02wcdT/bdwXUhWeUHuaWdwqdK5OK+wEKkbXyEER+qxAhY6iqEQx925TRZw96eQ== X-Received: by 2002:a63:de4c:: with SMTP id y12mr11617940pgi.198.1542408965179; Fri, 16 Nov 2018 14:56:05 -0800 (PST) Received: from mba13.psav.com ([64.114.255.114]) by smtp.gmail.com with ESMTPSA id r6sm41670483pgk.91.2018.11.16.14.56.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 Nov 2018 14:56:04 -0800 (PST) From: Ard Biesheuvel To: edk2-devel@lists.01.org Cc: lersek@redhat.com, leif.lindholm@linaro.org, philmd@redhat.com, Ard Biesheuvel Date: Fri, 16 Nov 2018 14:55:57 -0800 Message-Id: <20181116225558.27720-2-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181116225558.27720-1-ard.biesheuvel@linaro.org> References: <20181116225558.27720-1-ard.biesheuvel@linaro.org> Subject: [PATCH 1/2] ArmPlatformPkg: clear frame pointer in startup code X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Nov 2018 22:56:06 -0000 When setting up the stack in the startup code and jumping into C code for the first time, ensure that the frame pointer register is cleared so that backtraces terminate correctly. Otherwise, output like the below is shown when encountering an exception on a DEBUG build: Synchronous Exception at 0x0000000078A14780 PC 0x000078A14780 (0x000078A00000+0x00014780) [ 0] ArmVeNorFlashDxe.dll PC 0x000078A10634 (0x000078A00000+0x00010634) [ 0] ArmVeNorFlashDxe.dll PC 0x000078A11CF0 (0x000078A00000+0x00011CF0) [ 0] ArmVeNorFlashDxe.dll PC 0x000078A11DD0 (0x000078A00000+0x00011DD0) [ 0] ArmVeNorFlashDxe.dll PC 0x00007BC9D87C (0x00007BC98000+0x0000587C) [ 1] PartitionDxe.dll PC 0x00007BC99B3C (0x00007BC98000+0x00001B3C) [ 1] PartitionDxe.dll PC 0x00007F362F50 (0x00007F359000+0x00009F50) [ 2] DxeCore.dll PC 0x00007BD63BB0 (0x00007BD5B000+0x00008BB0) [ 3] BdsDxe.dll PC 0x00007BD6EE00 (0x00007BD5B000+0x00013E00) [ 3] BdsDxe.dll PC 0x00007BD67C70 (0x00007BD5B000+0x0000CC70) [ 3] BdsDxe.dll PC 0x00007F3724F0 (0x00007F359000+0x000194F0) [ 4] DxeCore.dll PC 0x00004008FC30 PC 0x000040090130 PC 0x5800F6025800F5E1 Recursive exception occurred while dumping the CPU state which is rather unhelpful, given that this prevent the remaining debug output from being printed (register dump, stack dump, fault related system registers etc) Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel --- ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S | 3 +++ ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S b/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S index 0950fd0c0cdb..dc52e1138199 100644 --- a/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S +++ b/ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S @@ -76,6 +76,9 @@ _PrepareArguments: // Ensure we're jumping to FV version of the code (not boot remapped alias) ldr x3, =ASM_PFX(CEntryPoint) + // Set the frame pointer to 0x0 so any backtraces terminate here + mov x29, xzr + // Jump to PrePeiCore C code // x0 = mp_id // x1 = pei_core_address diff --git a/ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S b/ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S index a81709d5d12d..8db022dcf05e 100644 --- a/ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S +++ b/ArmPlatformPkg/PrePi/AArch64/ModuleEntryPoint.S @@ -109,6 +109,9 @@ _PrepareArguments: // Ensure we're jumping to FV version of the code (not boot remapped alias) ldr x4, =ASM_PFX(CEntryPoint) + // Set the frame pointer to 0x0 so any backtraces terminate here + mov x29, xzr + // Jump to PrePiCore C code // x0 = MpId // x1 = UefiMemoryBase -- 2.17.1