From patchwork Fri Jan 15 15:46:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 10395 Received: (qmail 125277 invoked by alias); 15 Jan 2016 15:46:27 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 125262 invoked by uid 89); 15 Jan 2016 15:46:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:2348, HX-Exchange-Antispam-Report-CFA-Test:102615245, HX-MS-Exchange-CrossTenant-FromEntityHeader:Hosted X-HELO: eu-smtp-delivery-143.mimecast.com Message-ID: <56991443.4080700@arm.com> Date: Fri, 15 Jan 2016 15:46:11 +0000 From: Szabolcs Nagy User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: GNU C Library CC: Marcus Shawcroft , Subject: [PATCH][AArch64] Fix libc internal asm profiling code X-ClientProxiedBy: DB4PR06CA0080.eurprd06.prod.outlook.com (25.162.49.48) To HE1PR08MB0843.eurprd08.prod.outlook.com (25.164.53.17) X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0843; 2:FsAcpsjqlzBRw7CsYiAF4Fbg/s/9PvUcreEc1nBgPF8G2OcM/Clf68lqLEXPDWTdyl6t+yFR7NLv3mAJA04CZN0Yc6tr2Bq4ZGDthgXEQ7Qn+UIRohtM29mcxw80KYT0K4ZPWzHoRJeJxjV+FybznA==; 3:lkvx6Ka9Gt0rAd0kDEEJgXubBZ+pUGPbPBLdF/FFdULQknx2Rq4kuhDZ/kQqdCl5fOg9n9sG7LUKEv5SAJ5SQ7Sn2+gSaGEdLW1RGLk0Cqf5y+2ZE0A9iTYNmh9NUGr0; 25:X5XDg7mr1IwLLnQAHZUSf8bkr3VLS4GrkfTgxBo4zW3OVrIFPCLl8v6UY1eNe5+XQMMKRFyKlQmxbtyS6FeG2Ph1q6uRUZZPBpfcMgAEdR1jwp/OgF5e/gpnxLFNZQWmiZe3GuElKweQoNy7EAkGEACBxKDWQq/LetBHw7vVOgitlRgk4ziXECnRdabwtO0uVa6DRyLxy1/kOThSxxtvf+vAt6Ne4FBGQEb6cAWBobR+xwUC79K8dRUg0HWeo3Bn; 20:twzDDzDMgcExu6ijw/WMV0HZCCGspvEDKw8GoDk+XZv5NrwUR0l3PqEvyvkkNBxFlyEbWYqaU3ODx4Jakvnx3GxjH+XMmKZUdN/RUCHN7jAyn7u601Wgbw0F9xgmMLa7oHDTIgmagWHNrlkA0q4mrs3kUSFPSJwTzOjvEAyEPZ4= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR08MB0843; X-MS-Office365-Filtering-Correlation-Id: 8df88d66-cc4d-4d56-6585-08d31dc301bf NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102615245)(601004)(2401047)(5005006)(8121501046)(520078)(3002001)(10201501046); SRVR:HE1PR08MB0843; BCL:0; PCL:0; RULEID:; SRVR:HE1PR08MB0843; X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0843; 4:djXO5HcS5gXjU/31Ki8TtbGgeu71M3D5lRA3y7JnEhl2h27aL9Wolg+35205ju3xtRMDtrv2MdvkF0lqsz8diQvlyzbMy4aMDURR+6FqAit374Lbtaf0iJ5flvaTJ1RGg+NRUit4udrzCsAWt6pFeYBCmbL31zVTVhlcl9ZJi5VI3pqqUsKmZ9ufiTtWrh4nD/riTowhbTu+2vYAD7kEEosBicZhO8PgxOb9aoDTjO+ik3qIzdq1GxEJ6HkjkCRa7y8N4uSoKA0EVPKwYcb0DLafvpcrFmDUOfQ2hVDw3LlDn9rR/DRXD+AAu2PLFn/b9EMwh96HNmaHrK70ByfPWQ/AQK3+GHDPyAWLK1uroxUbcwbMLw7yrCCN3CRn+2JdqlrEGr9lFIDJXMk+pWLOUYoLkcBPvYUghdX8l2TBCixPX1a4DHtEwKoKXvPlPXNa X-Forefront-PRVS: 08220FA8D6 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6049001)(377424004)(199003)(189002)(77096005)(83506001)(270700001)(6116002)(1096002)(84326002)(2476003)(64126003)(586003)(229853001)(92566002)(87266999)(66066001)(65956001)(5000100001)(50986999)(65816999)(54356999)(87976001)(40100003)(65806001)(101416001)(4610100001)(86362001)(19580405001)(5890100001)(19580395003)(99136001)(3846002)(117636001)(568964002)(4326007)(189998001)(105586002)(512874002)(110136002)(5001960100002)(36756003)(450100001)(59896002)(21490400002)(97736004)(106356001)(5004730100002)(5008740100001)(2906002)(4001350100001)(81156007)(42186005)(122386002)(62816006); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR08MB0843; H:[10.2.206.73]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR08MB0843; 23:T2NYeIKv4DMJnKRvcJp7YkAw36oQDIEN6PHqb7uPA?= =?us-ascii?Q?D5oN+Kk2RaotK8mtqVU1Jes2ye10lkt+BG6RSCC65E2eveF4e33UtvNPN7j/?= =?us-ascii?Q?U0FAtI11Q90N4UQvk1j3UyE24CFnGacjcjcqt/zZoDC0ta9pX/R8iOl7Yapp?= =?us-ascii?Q?SO59DXKjbJriuaRiLzcq1TGWV7w4yvQsNLfnRAJXIIlaU9mk4D8UWDF21I0B?= =?us-ascii?Q?phERixPt1gK5a0FnGg3ItfdAXvlVjj/BCKawHnkyTdRo/qaiWw3O6nvjANDp?= =?us-ascii?Q?vChNIh4Jss/ahxgxp01DwKn7QAoXLIjtF7GOUB59gjOHL1V6Oj2lw8b32vIA?= =?us-ascii?Q?1jgYNDK8mU5DF/ixzBs/9noczR9BiaqLCJs0ci8mTJg32iipFfRLmHpDquB3?= =?us-ascii?Q?oegpEF0RyJEqMU7iLLVWibO1xbNDovIYOoN1OOQD5hCKMJh3Z7swKhvayXPB?= =?us-ascii?Q?b8qJ0l/+crZArMGHCS2bP6TgMdUYJWhyJqUundD+6MM+FB5kCTEGFwNYKulD?= =?us-ascii?Q?k8GydO3xbpySeK7/gjTn0DV9xlFzpHBCm4l3e5qFjRRBfH3e5Hrg4Xc5AhP6?= =?us-ascii?Q?6L5qCMJYr+ISd3N5u86wdRRu98Vg+vW1A4kly9kUNkGNyFIxpiFC/v7akxbd?= =?us-ascii?Q?5n4FG8G7T2wRXXEH0fXxYlDE34f1q3fZ5QuNpHHdKXLbB0CtqiGfTEn2IUkZ?= =?us-ascii?Q?Gnrc1aaJPYOFtuWcrEAuWKkGn8G3Q68KPGxTjKZM0679ulNmoFo9efOu6WXH?= =?us-ascii?Q?fB3Gjey5SkygDxYtvYn05N+OGeP1Flhq25mtVCzZ6fkVZn/CRxBe5hS8/T/5?= =?us-ascii?Q?AEZ9PLu+1JG6iCbHyaw2WTLHBPmfVsbONWRfGw6a8spiJOlaSru74pDobUfz?= =?us-ascii?Q?yu92uyUFTY5uF4qv9578A7pZsALiLjLQsYuORZ1Nvdx/fQsDJCSyfKdbWteA?= =?us-ascii?Q?IDnGBKpwks3V4FQ9toJQ9TyysXo+IA+vB0jVoBvDMdXFjVRdCCNHAYoM2XG5?= =?us-ascii?Q?rpzVUmEKPdrnlnhrZLg8c6rPUOutKllfTioej4NpV6uQBvSr6QhK7tFo6KeY?= =?us-ascii?Q?sEQBOfwUtd21LNBOnDS3mZbSu9oV3XG2syGHykI2zBq//aNn32w2VRkg/rR/?= =?us-ascii?Q?AQVWzLS0Ta5n3axLylzNFGkP+DrDNIcOcBGr/L3RZP1t6Zg3hPoXtCw0baYG?= =?us-ascii?Q?BWWCpIqELq98VZrlVCJIVlPL2FvGvnpNvOo9RI4q5TzRujKEjgFuZ7ZvfZU7?= =?us-ascii?Q?xTaWv+gVuGNSu6i/ennMUMBSNYuuFKmrhaAL3Mq2pjd3k/ZYkUj+d4kI0pTA?= =?us-ascii?Q?/wiumn5FIvu18lM0qUiOPUv9KlX63NtF486uA+DPcEXczQgK/1Zi/cezQHgB?= =?us-ascii?Q?HwBgN5Hmr8dqdo21MoTPUXAj/QoOGu5XfzgQB+wA5zc1uAxGRoJ/ZNoaEqkP?= =?us-ascii?Q?mEbFPYADg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; HE1PR08MB0843; 5:jy9GD++mI9zlbJgIJmFc2ZmpCDjbgJcuRnxXknWhtMdkOtFA1JU/+j+gDmXd8riHUYgl6cZe/n2HI+71QLC9+izwP//W6eoEaHzUP5S1ZPCMNBB0P7Cz4LKpoh8QrGbEKNfxrZzbux9e+Sbiqd/KWA==; 24:iIdyMlWL1VaiRlS86ZNdOHopWvOjBTHITENm8q+BH3D5U2siX8fkHOGoUeiLXLy+BmWGprL7ISLRQJ+k0pMD6xYqMEvbHxld9IyNMLC2MAI=; 20:lviooQQqosdTLQlbLbu5LZsST3364IOgd0wNXQbLer9eDR5/ASb1heO3oI+BeI62bVFaF9MonU/wH22NLgPgeh4BDNj9m3VMaIUQOSta6/RlILZLEVSICizOl/i6/U5jMxZlWblZ0L7pYOH/hCkXEnus2kSO130DgIf56mVb+MQ= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jan 2016 15:46:17.0614 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB0843 X-MC-Unique: tdFoLy8oRV-6SxLob6VYrQ-1 When glibc is built with --enable-profile, the ENTRY of asm functions includes CALL_MCOUNT for profiling. (matters for binaries static linked against libc_p.a.) CALL_MCOUNT did not save/restore argument registers around the _mcount call so it clobbered them. (it is enough to only save/restore the arguments passed to a given asm function, but that would be too many asm changes so it is simpler to always save all argument registers in this macro.) float args are not saved: mcount does not clobber the float regs and currently no asm function takes float arguments anyway. 2016-01-15 Szabolcs Nagy * sysdeps/aarch64/Makefile (CFLAGS-mcount.c): Add -mgeneral-regs-only. * sysdeps/aarch64/sysdep.h (CALL_MCOUNT): Save argument registers. diff --git a/sysdeps/aarch64/Makefile b/sysdeps/aarch64/Makefile index 0632355..562c137 100644 --- a/sysdeps/aarch64/Makefile +++ b/sysdeps/aarch64/Makefile @@ -12,3 +12,7 @@ endif ifeq ($(subdir),csu) gen-as-const-headers += tlsdesc.sym endif + +ifeq ($(subdir),gmon) +CFLAGS-mcount.c += -mgeneral-regs-only +endif diff --git a/sysdeps/aarch64/sysdep.h b/sysdeps/aarch64/sysdep.h index af1af70..d1f8c22 100644 --- a/sysdeps/aarch64/sysdep.h +++ b/sysdeps/aarch64/sysdep.h @@ -66,9 +66,38 @@ /* If compiled for profiling, call `mcount' at the start of each function. */ #ifdef PROF # define CALL_MCOUNT \ - str x30, [sp, #-16]!; \ + str x30, [sp, #-80]!; \ + cfi_adjust_cfa_offset (80); \ + cfi_rel_offset (x30, 0); \ + stp x0, x1, [sp, #16]; \ + cfi_rel_offset (x0, 16); \ + cfi_rel_offset (x1, 24); \ + stp x2, x3, [sp, #32]; \ + cfi_rel_offset (x2, 32); \ + cfi_rel_offset (x3, 40); \ + stp x4, x5, [sp, #48]; \ + cfi_rel_offset (x4, 48); \ + cfi_rel_offset (x5, 56); \ + stp x6, x7, [sp, #64]; \ + cfi_rel_offset (x6, 64); \ + cfi_rel_offset (x7, 72); \ + mov x0, x30; \ bl mcount; \ - ldr x30, [sp], #16 ; + ldp x0, x1, [sp, #16]; \ + cfi_restore (x0); \ + cfi_restore (x1); \ + ldp x2, x3, [sp, #32]; \ + cfi_restore (x2); \ + cfi_restore (x3); \ + ldp x4, x5, [sp, #48]; \ + cfi_restore (x4); \ + cfi_restore (x5); \ + ldp x6, x7, [sp, #64]; \ + cfi_restore (x6); \ + cfi_restore (x7); \ + ldr x30, [sp], #80; \ + cfi_adjust_cfa_offset (-80); \ + cfi_restore (x30); #else # define CALL_MCOUNT /* Do nothing. */ #endif