From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30574 invoked by alias); 28 Apr 2017 10:35:32 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 30545 invoked by uid 89); 28 Apr 2017 10:35:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.2 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:1724 X-Spam-Status: No, score=-25.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: EUR03-DB5-obe.outbound.protection.outlook.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtcompany.onmicrosoft.com; s=selector1-qt-io; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=wMRu0xJXpGerBguYLo6L7wJAQd7+y6Os6wCWnrzYaj8=; b=GMFGgS9g5gT6awnzh5/r0WHbwLr8RVjoeiEfenBQxJushpQOUSpviLZC7TXiNqqS1TEudkE9s/NJ/oguvzrr7vxhHeLhFI5XKnJwZX8bGff7x2B4uz8md5HNnfsbO1cXSX7/Tfh/Nwfq/bfqLmJAja9z7hg6qQqEACwTMqh24Qg= Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=qt.io; Subject: Re: [PATCH] Make elf section sorting more deterministic To: Mark Wielaard References: <20170427194124.GE2061@stream> CC: From: Ulf Hermann Message-ID: <355f6ed3-88b1-adf3-e2b0-7ba52589e4ea@qt.io> Date: Fri, 28 Apr 2017 11:21:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170427194124.GE2061@stream> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [62.220.2.194] X-ClientProxiedBy: VI1PR0602CA0013.eurprd06.prod.outlook.com (2603:10a6:800:bc::23) To DB4PR02MB238.eurprd02.prod.outlook.com (2a01:111:e400:289f::13) X-MS-Office365-Filtering-Correlation-Id: 929f1209-8b2c-4a48-6124-08d48e2249ab X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:DB4PR02MB238; X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB238;3:sSPYTK+FpqyXYJL4h/5gibkGyulRnag3xjH3+Axy4NlE/LXd7fFRuaZU4jbA5ypBXvBfRaRqnFyHhS4jT+JhqI88RUK9Vl20kY22LUHJm1FIzIBtfm23lobLb/ID2Wx0JyvfnuKhgTa8be7qZPTQq2JY2nG5EjHV4Kaexj/1HoKZCRWAT+tXawfDBbnS2Q1f4xFcFNMjGsRh7m3bWu5lNiGRE4pxRBeOc7q82Tg2zLsGo3aLrrM2ttsypDhL4N3yQYcinhlt/C4MO/a/lSUdttaWWtZx44rwbNexBjqGvSiOujy4ATT+q2oP2TBwCf/Jj4y/gzuaobAXAsoCIpQ6uw==;25:NlAfwnJyZidFxrS+TZ0DLORTtOtBaM7vhY9TNdk3qNORfrUSQ55svN8YRoXQMquzWFAC9piVqsFyMmdWU8mPYCjKiBcU07RFjrJz/EkpuqYFCM5CSL+fikjf8N5yzO6RSoHX5qobxfhO7kJtwLU6bCc5p0UyymOjcyR2hRsZgt3lbXxw4bj3zFUvc/GwwhCTLwxY6OKCLholJUG89Hw+sg863bCla4bSigTpXKUSGYuGw++832vaxzM5zLe8PjCJKPWcc36gwGij6vKw3eWfhiFZHlIP7ovzfjHng7Xs5v9qT2tm4m1FuCt+ZixmR0J6FBo+5W6+8fDwqaoPDAHZzhBkE3VadNU8kJrD9MyVHZvNROS3VIN6LQv7OGLkhl0AcIDDVj/Z7Q0A/8hU1BUrb+ftVJ91EZYhdFcSP4ZRXuU3psrGbGhnGT6dZlEmW1GWZHnFsXlIiISqLUqCmzbP9A== X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB238;31:UdFHZgGVPK87esdR2hj+gka7hlkvdSuflUzkO0CV6YPdK3m8I5ZwtyPYckoRBoRNqgA236FHbx3+Gpon0tPuS0nfvlyGxKFgqUhffXBIJqcij6Dii8klb/nPbCrpgYE7hypjy4sn8uXn7c3huVXcF7sJ8EtcoPzZ95VE2VI51U5GB0gyWvl/tvOg65miS2DTCbF/iOlvQs8umGOXSKlCmUKZy2qMa+rKcTjFRGQ5fu+3vBpDxgZHcevxQS6Or0TzigcdLS5xS6K85BmyHCPdggdQzQM06fWQZZML+yVB9Ck=;20:PSgKwXM6TgenE8lgKjnySyqOZXKk20G8NXRB9hlaSufleEHU8pQtuQbPpAUomA16HF9q2Y9IcCC9rqk+hAhfDAQYZR/7dli7JB2OwgWEd1/HJ15BYhR4GrxQ2lwnmDlSNJetS6+B86uFQKSEZq7M/1t6NegW/yGLIqMJ2txrAN83GBW6xGuG65RLkSZoaxQqGSqee5FjJre/wdajHG4XrGz3942f0JSxQCGq61GCVEGlRzjzNj4D5e/Clp8ytpdO X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(6041248)(20161123560025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(20161123562025)(20161123564025)(6072148);SRVR:DB4PR02MB238;BCL:0;PCL:0;RULEID:;SRVR:DB4PR02MB238; X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB238;4:QSAKh75D3TI9WUpWUTw9r4CJNL4syIGabl8t+aAkwgRwML21Txj5wPTifjJlqLImmFfT+XIFr9J0WMVmppSqgO9SErm2PXW0iroWWfUZmcebGGz9y5A1vuWYJ/oYPYewWe5ONJNHhYL3x0MOrKeozx+lGtJKycwLEJSfXrhOaHUEEup7W3JDNnQFMUDIIqYYZSyMxjVUbIZPNqjM1LPqjj+BIlKYmxLySupvxlFi0/sbV+JAwn3XfQxTDB+XBDlJ11QXUS9cSsm2YwAI7Q8HsOi40Ba1BxAfPyaZblcOW2h06pXi4nfI03r8pXOaXCKFvsfjDZca5mNRQ9E2d6FiGeCT7s6PnJfxtTN6wm/PojhZXG3nMDYWn2BG97I35TItO53c9FQJ9nAvCECZ2mfwAIs5kqgN7jC8LAlvd9HQSH6fUL2oy3vNbFMHXgzmP0EvgqVvh2RZz+YR0JkpyAclspj7ENDiVZy/quI7S6IpCNW8I5CGBNcZM3EYiojnRBbwWCD/K6f9RirW3wsG1TDFBxDRcuLOHS3itNI0GrrAC8cAQ7eoSE7GjYjE5hOsi4cQmM+tah2ShjSLwNs0rynr3gvP8zuAb1ZcHruKcq+c0QWWaMyKIa6LxpP7y9HjI27+MFKKdp8j2XmtmtT/lyw/LzUnTyovQesohD7lyJlfYQC5klUeWPSVkRPjdaP0QgLMmGqx8bazQNP9Iu3MwXsv3Q== X-Forefront-PRVS: 029174C036 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39400400002)(39450400003)(39830400002)(39410400002)(377454003)(24454002)(53936002)(6916009)(2950100002)(33646002)(83506001)(76176999)(54356999)(4001350100001)(4326008)(8676002)(23676002)(50986999)(86362001)(31696002)(25786009)(53546009)(81166006)(6246003)(110136004)(38730400002)(6486002)(77096006)(65826007)(36756003)(5660300001)(6116002)(3846002)(7736002)(230700001)(305945005)(2906002)(189998001)(74482002)(50466002)(229853002)(66066001)(65956001)(47776003)(42186005);DIR:OUT;SFP:1102;SCL:1;SRVR:DB4PR02MB238;H:[10.9.78.56];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjRQUjAyTUIyMzg7MjM6RHVLZFZ3cW1vOGJpTmVOMCt1Rm1ob1hteHV4?= =?utf-8?B?d1ZvcmtSZ1JPaUJrMEVzQ2F6REpkN1hPTUV3ei9FUzB5cnVFRHc4R1ZlWGVT?= =?utf-8?B?S0V3M2FnbFJMak8wcWVIREVPVzRWd2xrbnQreXg3N1Nob1ZybkNKNWVEd28w?= =?utf-8?B?Rmkwb0NPNWl1L3hNQWc0Y0M1SVBTY1ZLK0FtS3pqZ292aDVrRG1mNkY1ajVM?= =?utf-8?B?U2htVTNtb0pNMWdKTzE0aUVRSlZYWHJ0VC83RFU4Y2V5MmhVZEpMMHZxNFV4?= =?utf-8?B?eEFxeDJwZTB0VEhZNURZK1VrQytWUjRPM0NmUm1DaDZJcXVzQW1Pb3pPZFls?= =?utf-8?B?V2FSQSsrcllRN28zcnhSR2dkN2lxQUNBMllWVmthalVYMFA3ZENhaUN3NUFK?= =?utf-8?B?bVhJdmlzNnlOVi9tZnBRMUNoQlc4aUQ5Zjc4MUVEYmlYamd4Umg5SVR1Lzhi?= =?utf-8?B?MktLelZKNjVLS1EvazNtQ09VcFZNVVg4S0g3d3hCMDNxTXNURDI3VUpVZ24x?= =?utf-8?B?QUhjS2gyZzdTK1hNaGtKNWExVFF0am9sa2Rtb1NkNnJPL3NOK0JvNXI2TDlK?= =?utf-8?B?Nk9MM3hDNUswNFZ4ZFVLSVhOMGtWeTlmT2tVWUR4a2FiYm51WEYxelI5bW0v?= =?utf-8?B?T1NMSkNGUHEvMVhyQ2dmOXV0NGdzQmZiNWJNUkZPR1YrN3ZKZ3U2VzNvdEFP?= =?utf-8?B?eVEyRytaNmN5dVpYQ0hZRlJCcEdPRFc4aFEzNmR3Nmp2SENWUEx0MjFObG5w?= =?utf-8?B?Qm9PaHZ1OGtvUEVGbkhyeUcrcGx0Vm0wc1pndERqL0JtZkV0Q3JFRjdSdjIw?= =?utf-8?B?Uk5UYnpTWUJDbW1Wcjl6Wnc2eDZhSHhwZkdWb2cxcnFWeFpSK0N0N0xFUXhX?= =?utf-8?B?TzcwZ1o1eG5DSmw2eHpsdUhneDd4RDJ0R2hZRzBodHN3WkVZY3prczk0b3RU?= =?utf-8?B?UTlwZVY0b0k2VTZGVGdvNE1mT21rakFTT0NENHBWYjJVN3hTdHNVYUlqVnY3?= =?utf-8?B?TUJTcEdBQlNCdUg0YWU5d1FFVjh1NVE1Rkt0cDZHOGhQKysxMkVYNnRJaGFh?= =?utf-8?B?K1YrODNFbEVzMTJDcFhGU1VVdnAxSkNCM1p4Wnd6MEkwcUorMWpwaU5RQml2?= =?utf-8?B?bUV1dTdIeDcwZTdLdFlKVTE5NTFYZkNJMi9Wa2xJY3dkSitUZnZUVitkL1Bx?= =?utf-8?B?OXFhRnovaGZkRXB0dWNuZWk4SUkvek5lWFQ2WTlEM2RTakxBOVlSa055TUFk?= =?utf-8?B?V2loTzl6OWVxMHVQSkxJdG91YVVBNk4reko1cllsV1NiSGZhYWlJKzE0enRs?= =?utf-8?B?aHRXbEs2MEFMZ3JQSFN5YkJrd3d0U3ZNZ1dCV2t3NUhpQmxHRlEveENlVU9V?= =?utf-8?B?NVpTQ3VvTHY2VFZiZnRYTTBSdDB1N3NyUnczVnJIWHlJRjYzTDM3azUySXV1?= =?utf-8?B?U2xvaGpXV0I2bC9uOHVMOFM3NFp6eW9rc2Y5VXV2MUlsblRJci9JNTJlSnB5?= =?utf-8?B?dTQ5L3lLeG1KeUt1ZWhER2NleU85UDNHTjI3NU9kRGhQd1NGVmhhYzY0eU1H?= =?utf-8?B?RXN6QXRDeGg4MThtTkRodUhEbUQwY2xQMHkwTGFMOHNQNis1VGxUZHBkdzMy?= =?utf-8?Q?ZBiI1TCCuZrJiPokdAg?= X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB238;6:XEHqg5woXFc9HK7oR63I4hiIcyL19CH0ib2o3lg1JiT9Wmwrm8UGEoeiubNWQhJOpxK7ev8zqMQvCcNFCVnU/ke4/Jd5dE/fFbb/zrGaqSnLDmOENIw5uIqi5pDolBAr0wD1UUPoD2k1i1OTDdESqFjlzrwvO+dMPtCeiLNDnFjpQm7mAUudUGScaJbGaGyFvP3sb/byd5t/dH3IJiYB+ZOx5OxtHYCYhl5b+xSJ2umc7t8wgCc4OA++syJ53NYr64yVNDb9c/6rBgTuL9OncMIExXxEGtxRQgpP0P37T1U3gEGkQCfoW3Pr6d/7O5IKgTLapCktwy2qRt9czeB4ExE9z719VcM8O/8cKc/r3RufF0jAwSRNb2k8r9p4Nr6ViT/6hiAP7nPiW2NaVek2gEO/fADZl9nUTdlrDaUWf4JPVFYsUnQInsogYiUS/mIvbMdDJMO7iSoy0dRJcxBRNJVQB/XruMxsDe2AmAd+oVDZQyndJgwS+M309wd+Zatzdvhfs7/tlxRwUY/gbIpviw==;5:WEVXfTtkNQXoYS5CT7zXse8PMsyCQpVR2D8exB9UkMsZKU0ONd0lOpgzr/MRR0OnsEkhy2Ky5uwoA2K0e/7Sv3Jyb0QFFiahR2jgGOr3PcfduAoOCI5LXF1IAZBgq4r/Kteb0x9IzvNy4HoPacCc7Q==;24:x7edNDBj5gCNxHAgovVPyJfxPB0funlIeCLgzuGp5MUzyo8qoSRnKuOUlT8na8MWVzL2MuRgMztG23D+s1HM9dz43M9bZv2NScWxwVWqb3I= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB4PR02MB238;7:964WsmJiT56yqfS3DwHBSobZ788G9AM8W0IDOGoQeP4vL3gGeRWUkQHUJRNRz56R4+cuRU+RvBcAWgMJ2GFch/rCN2zSoNquyNvkbweyohgXG0conle7V5Cz8SC+ALShIGjkT3+2ArxZ5ZNZb8uPEYks9RAG5p/mXGx/gV/Yx7PEs0YXbeK6krbHHP6zdNQRw+H4c8V/xs9K3CEcpjCJNyez12duxuRdygbk2BKCtzGPFRxReMjJpvpSJcSJO+yVpA+667uzNQgacOoxrLc2VbrWURdh1y3ZoRel3Hugpf5zknkK6rHZWBOqyEpaOILOYSR1Pj8aXFI9eJQGg2pIIA== X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2017 10:35:27.9320 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR02MB238 X-SW-Source: 2017-q2/txt/msg00122.txt.bz2 On 04/27/2017 09:41 PM, Mark Wielaard wrote: > On Thu, Apr 20, 2017 at 04:54:26PM +0200, Ulf Hermann wrote: >> At least one test (dwfl-addr-sect) depends on the order of elf sections >> with equal addresses. This is not guaranteed by the code. Compare also >> by end address and name to tell entries apart. > > O, interesting find. If the start addresses match the order depends on > the specific qsort algorithm. So you need a real tie breaker. > > I think it is simpler and more predictable if we just take the section > number into account. It seem to have the added benefit that it provide > the same ordering as before with the glibc qsort, so no testcases need > to be adjusted. Does the following work for you? > > diff --git a/libdwfl/derelocate.c b/libdwfl/derelocate.c > index 439a24e..0d10672 100644 > --- a/libdwfl/derelocate.c > +++ b/libdwfl/derelocate.c > @@ -63,7 +63,10 @@ compare_secrefs (const void *a, const void *b) > if ((*p1)->start > (*p2)->start) > return 1; > > - return 0; > + /* Same start address, then just compare which section came first. */ > + size_t n1 = elf_ndxscn ((*p1)->scn); > + size_t n2 = elf_ndxscn ((*p2)->scn); > + return n1 - n2; I would inline the whole thing to return elf_ndxscn (p1->scn) - elf_ndxscn (p2->scn); There is no point in forcing the compiler to keep the intermediate numbers as (signed) size_t. Also, I would still keep the check for p1->end and p2->end before this. If we have a section of size 0, and another one of size > 0 starting at the same place, we want them to be sorted by end address. The zero-sized section should be squeezed in before the one that actually has a size, not after it. Ulf