From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 84211 invoked by alias); 11 Sep 2017 09:24:59 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 83759 invoked by uid 89); 11 Sep 2017 09:24:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.3 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS,UNSUBSCRIBE_BODY autolearn=no version=3.3.2 spammy=H*r:sk:mail-ve, Hx-languages-length:2096, H*r:104.47.1 X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Szabolcs.Nagy@arm.com; Message-ID: <59B65662.3080106@arm.com> Date: Mon, 11 Sep 2017 09:24:00 -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: Andrew Pinski , wangboshi CC: nd@arm.com, GNU C Library Subject: Re: [RFC][PATCH] AArch64: use movz/movk instead of literal pools in start.S References: In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: VI1PR09CA0043.eurprd09.prod.outlook.com (2603:10a6:802:28::11) To AM5PR0802MB2481.eurprd08.prod.outlook.com (2603:10a6:203:97::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7da52344-fe8a-4760-bc95-08d4f8f6f639 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:AM5PR0802MB2481; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0802MB2481;3:HdzK5eQfXeoTdBC6Bpf4je6saRzSoQJXxwpw5gpeDeiyFEsrV/AZHVDtVCWxCsrmbjzG/Q554T2ZSv6V9jYqo3iQyojeEaom4Q/9Eqkij3V5zDbCjeHBr7m1cH0srpYX+rt4SeXGWIPbn/5NChBDLlcL/EklyCtWfK4VN1096OrDs2HMiNqUqVrykK7Bvjseijggk9m+oj3A0fndP9+I7gYhcew3e/gZ90I5NKnZ5K4pLdTvdzjh8iMOUwekrD2c;25:XUQRu9iIaeAzCUsP0kOcpw/xfh7OluAqtF2cm002yz2WkhQdIMTWoCJtW/afWuFghq6mBOsq6TagcD1Ia5KtY4ytINZRcGj75bTMU5plYeCtWkwKb1Svv9zjhsdwrP0b+0FUzWUSvnKL0Nk5MBB3z2M4/RoG/nZv+Em0CXn1l+5A8ocCa0lNPYRt7MyRlkVYJPsMHoihXRd5DX1/Mrn/qglU/RJ7+asFJl3jRsTtA8T+Dd/NKnCPfHyNGMWATkoxIiH4ZEw2peoH26EElQogEQdgNUBlDTQU02Tu5WfdgQ2s3XbGX0SP9PDjAe2wNXOZm2I4Te5JIixvyaydJ80SDQ==;31:4CKPlVVMcxti7RVdPoCnGPb8eIAnyuuDTHgaQlHmzIqJiClAXOaGJnhvso9gPX50Efq1UFmIgKcSqzgHCdOnZzJ1rzBkGZtgM4/bb9cGZocosZTy9kmTpG5STaWm3VCqnq053dmkQI2YOowj0WI8BjI6w7U+xnA33L22EcXv7gEMEdWxxhKSNOjbX7toldN6YYlpQ/lWFCRBnwSu6MQKjH7PEpz2OhxwLYyQ5QU7Y1U= X-MS-TrafficTypeDiagnostic: AM5PR0802MB2481: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1;AM5PR0802MB2481;20:KtQ1zeun3xR9JFGZ9cnhhJwyp7HXoH22aUDAf3sg9O1yROekdcb1bV2F6cySFjDbMDRVdc7h7nuCegK4jO/+eUaxjUGecMw2OH5a4OcO5RjeAHBN1G7Tl1MdPBsKSHcpnPB48vdhn6cdqrz7sEGdBDHwDpULDWLooWb1qN7E6wI=;4:4j0ob0+8261rvaFCo7L4cGBODIM+jjOCSuAIGDIAIC5/4Z6X08R5gnNvoaTbj9LZaARzxQ+VrXqnvYPNfJey6jQuFvJo4ACmat8iWYZ/6uKgSckANMLMz9OaBisiDB2niwS+m8wO+KR7iVzzsDATqoquZdgPwF8WxSlgguwr0ybZRJSQtAci7nuZu4kTq65aX2fNq7efLbXixmV9kxQAlxYMfjPr98xwpEgByuTR9Fg2IZY3D3L2Gd5Dwx7KItocWnrrfIAOsMiHJC7Lv28aAz1bx5mUEr6U1E/nYz2+yVk= X-Exchange-Antispam-Report-Test: UriScan:(50582790962513); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(3002001)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123558100)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:AM5PR0802MB2481;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:AM5PR0802MB2481; X-Forefront-PRVS: 04270EF89C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(7370300001)(6009001)(6049001)(39860400002)(199003)(189002)(377454003)(24454002)(65806001)(66066001)(65956001)(42186005)(72206003)(8676002)(478600001)(65816999)(47776003)(6116002)(5660300001)(87266999)(3846002)(81166006)(81156014)(106356001)(4326008)(101416001)(2906002)(189998001)(4001350100001)(76176999)(54356999)(50986999)(83506001)(50466002)(64126003)(7736002)(305945005)(97736004)(53936002)(53546010)(33656002)(80316001)(25786009)(6486002)(86362001)(6246003)(77096006)(2950100002)(68736007)(23676002)(105586002)(229853002)(59896002)(7350300001)(230700001)(36756003);DIR:OUT;SFP:1101;SCL:1;SRVR:AM5PR0802MB2481;H:[10.2.206.69];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTVQUjA4MDJNQjI0ODE7MjM6R2tvVFNaejV5UGk0MGQ5TmhEVVNHL1Ji?= =?utf-8?B?RkFBMHExb2NiRnRCRHkzaXU3Z0JMVzdMRmtJL1F6YnJUMnp2bEhMZkdRcnpM?= =?utf-8?B?YnFNUVpmUmdFY3c5eC9TL0t1blFsYTlCZTl2ZDNFeFRyTFlDTXJiQUJDeFZS?= =?utf-8?B?MVlNNTFUVzZLaUJLMzZHWk5EY0RQWk44RHY4WXpDV25ENms2akdabEQvak5n?= =?utf-8?B?R09xTDdkRVk0VVl4Q1RYclRmODlCNDhKWEJ3aW1LdTcxUHlyUUYvOHFRTUlS?= =?utf-8?B?OVpuMlkraHVJQXd2UWxNRmZLcldzZC9tUFkyTTdpTWNwMXY3QVFWV3BoWWdk?= =?utf-8?B?a2tiVkx3RHpaNlZRUFJPQ3FOR3dzWkdGM1MrYjNzN2NQNVJHb3k3VmR6Q3ZJ?= =?utf-8?B?R2dQcXk3VExWYll6NDVTclVmM0R0ckJKMEo1Q29udnUrOVIzQmp0cEJKVlFs?= =?utf-8?B?d0lSakZrNFdRemhUUnFvYWt0OE5hT3JpSFRiQTdlaW5VSTFaRWFMU0NDTFNJ?= =?utf-8?B?bC91YjVXWDFKQ1NkUnJ1dHdBVUtGRHdQcHJTM055dzB0eWx0YTZBR0dkN1hl?= =?utf-8?B?Mjk1RVRSeVB5Y0NybENVcFp2ZU5TUVlZbHkyYWJicmRzZm1oRXVxTXJBc1Zv?= =?utf-8?B?MHBrNnZVbFRvc09KTXNUdW5CdExRU2l0UTV1RFRyNHVuYjdGeHVSaUpRdThG?= =?utf-8?B?WmUvWFBzVmxjS0JCdmpERFM5aXNxRWNUS0FCZnRiNC9PTW9VeGlKejFvQ254?= =?utf-8?B?S1lJdW5uN01BVEc4cklaa2t6ekdYOHhYd2R4WTNpclRZUUdHVVNsT0lURXpC?= =?utf-8?B?aDdrdHJhNXFuSUQ1S3FUWmt2Z1Q1ZmFoYjYzWmtRQTRaMThLalpBcWp1eU5D?= =?utf-8?B?NEJxRjU2elAyS1pORUhWQWhGRkxKSHQ4K2RCaGtnVEtLZmRsQnNQQXZZYjc5?= =?utf-8?B?M1FvZ0xWRUROK2pMeHpsUVNYOC93SEdkSE0wNEphM0hFeXZxbTY0T2tJanA4?= =?utf-8?B?V1l2ejI1ZDJ6dG1GTGRoRlFFODQ1WDlodEdrTDYxQStIa0trTlZuWGt4c29v?= =?utf-8?B?QkpRTllvVHVDRVpkTWdmbDcza0RrMG1EMzA3bG44WkpjRWpqaWxyek80MVZ2?= =?utf-8?B?bjNXQ0xXMitqK0QxeTBET0FGcmpnNUxBNTBicnBhelhLbFBuQk4rRFl1d3hq?= =?utf-8?B?TGYzSW1XSXYvOTl2ZWZJWlg0NFE3b0F0VmlTVmFzOXhMd08vU3FMYnRtZ1kr?= =?utf-8?B?aFdtdEg0VkwrUSs2SFlhYy9JTVY3UmRtZVdVUFNkcHZPanlBTUROTGhsVUxy?= =?utf-8?B?M0NrbTBycUhTUUl4Q2lGemZaSlNnNUkyUy90czZlWjhHaFR1RCtueG1qczBX?= =?utf-8?B?aXhUdExaL3ltOExkMG1tUjNDQ1I5dDM4bjhIRS9jdDk2VUxoemoxWDVKZ3d6?= =?utf-8?B?c2hiQnlCVnkrZzgzZGdqemxNR001ZlVKZ2lidFA3VTg5ZzYyUGVzUGV0MFZJ?= =?utf-8?B?VkhLYnRIK2lVTmx2aE9NWjExclVXUGRFRzBKTVNweTB4TXdscTIybDNIdGFp?= =?utf-8?B?L2l1eVJFME1VenFsZ0xtdm1yckJ4Z0d2azZFMGh0TTBVanZqZ3NrdkZ3dEg1?= =?utf-8?B?eVdvWnRBU3N3Y2RwQW03VzZaUktiSXVhL0E5ejk0aWo1Rnhtck5rN0NmbG1m?= =?utf-8?B?L1BqWVlYb3Npd3JaeVhHS1UwZnV4akt4bnF6YkVHbDlKKy9HUVR0QnI0RmhH?= =?utf-8?B?MFpIODVzSm1JNFlYaTJ2NU5rbzZkSjlSK2Y1V3E2VVRWMTVKK3BiNG9zUjVB?= =?utf-8?B?S3FyRHZ3RFlyYm90OXZGQW5mbGRiZ3ZzY1JRSnovcjJxZlc5TXlQcmJCemFB?= =?utf-8?Q?1Sny7d9ML8kiI=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0802MB2481;6:S8796pj3CVjehDlRy2AHdca17yDT7+RSQVK7A0/QJOyzfPSS3UOSqUeyj24bjlGQ3GGgv2F7exc+L/LDR1R/OIpzaBWXT2KhLpT9Odn4Of3hmRmiKKJhafuGW8kCLQjtWU5ZLj3/xChn7Fa8gc2u5HBhIDcFiVyfW5e6Q+/58yBePAB0DufXS/FPryRg4wa1jcJmx7cnCQQTf8dZqVmys2zb5DwKR5BXLixvfsAAS3nISYK+OmNGPBgtNsvHFdMuy8iV7Gw5weXZzrIB3KxO6Wh3Ug7Tx7k8/4fuAmv/EcnBzo4YPfAWOdgDRA3NgYoIepBvHVBva/zV/SYKo0Pp9Q==;5:MNcU79dV/+RtvS5+CuJPxdP5UDoYFIM8qeD5UhtB9ePpG1Fc0JdHS3bVDwlbV2BP5ZOsjchtwIHUfyyNearORF9wx8kKkmuskg10Gj/K3mxB4Wg2mroPYIIq5r1CbXumQJJgvXmYsLTzmXBBKBbxEA==;24:b1tcZQSS8V1M86DNK4uXb/jbTxnTc1nB6ZiWOEnkslFFDvKFalLTnM8d1g8SQz19w53qvBMNYLb8+cLyPCNhxljHQ93ubRTvU5iWXioCE9g=;7:1/Cfk49Y3OI4Ned75BJudRm3etzSNemqtOyzNoe0HDH2KsXpCAtmdtANi1KWv92JKc7UI33b3ePp8dXp/DBon4x7OpEiIJYINjukNM1TXfo1lf/kvORA3iI7asXIhESRbBXQCaSmR/vmstzNa15Nz/Jdr6kTZKLHkAp0cnEeKAmrIivHiN5tj1gvfH0Gwb0pwrr2SHxCh8C4HQChEriN1hxMmryRA8BvVeeHSOZtMEg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2017 09:24:53.7548 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2481 X-SW-Source: 2017-09/txt/msg00440.txt.bz2 On 11/09/17 10:09, Andrew Pinski wrote: > On Thu, Sep 7, 2017 at 12:33 AM, wangboshi wrote: >> eXecute-Only Memory (XOM) is a protection mechanism against some ROP >> attacks. XOM sets the code as executable and unreadable, so the access to >> any data, like literal pools, in the code section causes the fault with XOM. >> The compiler can disable literal pools for C source files, but not for >> assembly files, so I use movz/movk instead of literal pools in start.S for >> XOM. >> >> I add MOVL macro with movz/movk instructions like movl pseudo-instruction in >> armasm, and use the macro instead of literal pools. > > I have a few comments about the overall design: > I don't know if this is a good idea, can the kernel override XOM anyways? > That is if you do write(N, &main, 1024); > That will write the main function out to the file? i think the change makes sense even without xom, maybe a better rationale is needed in the commit message. (i don't know what the kernel does with the write, with a non-readable page i'd expect the write to fail just like on PROT_NONE pages: EFAULT). >> +/* Load an immediate into R. >> + Note R is a register number and not a register name. */ >> +#ifdef __LP64__ >> +# define MOVL(n, name) \ >> + movz PTR_REG(n), #:abs_g3:name; \ >> + movk PTR_REG(n), #:abs_g2_nc:name; \ >> + movk PTR_REG(n), #:abs_g1_nc:name; \ >> + movk PTR_REG(n), #:abs_g0_nc:name; >> +#else >> +# define MOVL(n, name) \ >> + movz PTR_REG(n), #:abs_g1:name; \ >> + movk PTR_REG(n), #:abs_g0_nc:name; >> +#endif > > Since PTR_REG is defined only based on __LP64__ already why don't you just do: i think either is fine (the meaning of PTR_REG should be obvious since it is used all over the place) > #ifdef __LP64__ > # define MOVL(n, name) \ > movz x##n, #:abs_g3:name; \ > movk x##n, #:abs_g2_nc:name; \ > movk x##n, #:abs_g1_nc:name; \ > movk x##n, #:abs_g0_nc:name; > #else > # define MOVL(n, name) \ > movz w##n, #:abs_g1:name; \ > movk w##n, #:abs_g0_nc:name; > #endif