From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id ED6BD3858D33 for ; Sun, 24 Mar 2024 19:18:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org ED6BD3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org ED6BD3858D33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711307885; cv=none; b=DxY82QD1kaMJ5oWLh3cZgdQpKft8h2TyW6lghJ3ElmUDDvL3m1I253gqrrj8l/K3TaqANZUvzmsmJGf6zR9yU9fXEvJaxfFcA8dtQZBJgdI5SiMTToVSuIoxuJy4oNT8HngVV/ZmWltx/AFY3fbKTlOSeWZNfvxexqD0M1qK2cM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1711307885; c=relaxed/simple; bh=4UWeTMlojEm1T28/Sq1dS6VmnKqsmtEIoycuqHE3ZgY=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=aISHGX0/G+uZHomF0x/4ERvHRpnFQJWe8Bs6acqPXaulUXGrWj0oawfNFQc1e+uSEB0oyI8DpPtQ5u+FXfAAm5cwnW4rVYI24cX7Lzn3gtvp+dDTWKYXmflY9tVAciLLOiFzzCp0sMWTMxrNn5caROgfT3Acb+Z0JJhN3/QK5Hg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-6e6b22af648so3090772b3a.0 for ; Sun, 24 Mar 2024 12:18:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711307883; x=1711912683; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=8FIBL1WaHW9wUoTZoO4pZSGCu5FyqCbELxiEC4uzgfk=; b=hDbCE25WrVaA+kxpLEmmqWKrnKgfm/uuXka4MZ3KNA/Lfqj/DYrafoqTs9CgK2RyBE bqNkDVXtOUrepsVNXxZX7G0jyvuLIqcXmg7gKnAboGWrvtUP+hYya6RLWn2e8ErbYHyb xqIZVs25QazuN4U0vqrDSqmcdvuL+GKwIRIHtXY3ZrncDKgUSnKH2TL4uUDPbNjRuv9Q KUCylJEtKpa1f1wVvLmgpJMupYjygyNYgtc9/4PT/t7rS6ERfB0KjcMJF3pDgbTRdCIS egYzrkIWDSn0Y59xYCOYH0XazyR1vN7JpLxVNTpyO+RIIIvxCyXBkppfGgF7TSipKnca /IaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711307883; x=1711912683; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8FIBL1WaHW9wUoTZoO4pZSGCu5FyqCbELxiEC4uzgfk=; b=tHu9It10UsX/p9yHbYsgnCcUHNJqpx+1tJ4PgstSp0qU3kvKHuOptgziQxPI1ULSWn W+t5O8q1bx73hOFO3rSZXXqPuCP+tJyPyYkrU5XlBbdShvW2lS4M4zcG2joqrMblOPkz wqTV6qJi+xuK7g+gbuvVRS1uhRaemYg+jd5HhazdgrGGCZhDLMSmTy7p/1ZNzR+cT7Ng UGfZAvGjECnmBu7tGUtoKHcOLOJJkEBjARMRlhgd3+GtUKvKfeiD93rzRiLtlvQL8pOL u0nhu7HRhg3emhMVPa/AodVdOBoCsxFuhytonI3YOp3Z6QKBqXzDZLGBjjOC8EqEVW1K CWJQ== X-Gm-Message-State: AOJu0YyjjIYoJsozI+UNpNzTGc2tvJx/9WY/tAJ0hsdHh4XVpL4X0iyh o8UhjxZzWX+FMOTIVhbZLQisbLLj/XoeylSXGifwiV5ASR1gBSSZG0v2efk5 X-Google-Smtp-Source: AGHT+IEeL/tfiX2beIfLGma0iKnXX0LEs01ymHTf9RfkKEpuOPG+5D47MCDf8oLsi/gSPZkZtyxD2w== X-Received: by 2002:a05:6a20:431f:b0:1a3:b020:bcb7 with SMTP id h31-20020a056a20431f00b001a3b020bcb7mr7052215pzk.15.1711307882842; Sun, 24 Mar 2024 12:18:02 -0700 (PDT) Received: from [192.168.54.105] (static.220.238.itcsa.net. [190.15.220.238]) by smtp.gmail.com with ESMTPSA id h25-20020aa786d9000000b006e72b591105sm2912068pfo.108.2024.03.24.12.18.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 24 Mar 2024 12:18:02 -0700 (PDT) Message-ID: <36b0561b-dfee-4c86-b809-20ab052ef96c@gmail.com> Date: Sun, 24 Mar 2024 16:17:59 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Getter and setter for Dwfl's offline_next_address Content-Language: en-US To: Mark Wielaard Cc: elfutils-devel@sourceware.org References: <20240306192249.242130-1-yakoyoku@gmail.com> <20240320225209.GL8319@gnu.wildebeest.org> <43c02fe9-1862-4257-8692-c4f3cc136ca8@gmail.com> <20240324170855.GF5673@gnu.wildebeest.org> From: Martin Rodriguez Reboredo In-Reply-To: <20240324170855.GF5673@gnu.wildebeest.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_FILL_THIS_FORM_SHORT autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 3/24/24 14:08, Mark Wielaard wrote: > Hi Martin, > > On Sun, Mar 24, 2024 at 11:11:21AM -0300, Martin Rodriguez Reboredo wrote: >> [...] >> So this patch is kinda pointless, but at least I've managed to learn >> what I was missing. Anyways, thanks for the heads-up. :) > > I don't think it was pointless. Clearly our documentation is not very > good (and given eu-readelf and eu-nm do cheat, maybe our interface/api > isn't really good either). At least to get the gist of it the header comments were good enough, it was this particular case that I misunderstood. I could do what I wanted with the API, so no problem with that. > Maybe you could post your code for that ./report program and what you > had to do to get it to print the correct address/symbols. Then we at > least have some documentation for others which hit the same issue. #ifdef USE_DEMANGLE #include #endif #include #include #include #include #include static const char *symname(const char *name) { #ifdef USE_DEMANGLE // Require GNU v3 ABI by the "_Z" prefix. if (name[0] == '_' && name[1] == 'Z') { int status = -1; char *dsymname = __cxa_demangle(name, demangle_buffer, &demangle_buffer_len, &status); if (status == 0) name = demangle_buffer = dsymname; } #endif return name; } static int get_addr_width(Dwfl_Module *mod) { // Try to find the address width if possible. static int width = 0; if (width == 0 && mod != NULL) { Dwarf_Addr bias; Elf *elf = dwfl_module_getelf(mod, &bias); if (elf != NULL) { GElf_Ehdr ehdr_mem; GElf_Ehdr *ehdr = gelf_getehdr(elf, &ehdr_mem); if (ehdr != NULL) width = ehdr->e_ident[EI_CLASS] == ELFCLASS32 ? 8 : 16; } } if (width == 0) width = 16; return width; } int main(int argc, const char **argv) { if (argc != 3) return 1; Dwfl *dwfl = dwfl_begin(&offline_callbacks); if (!dwfl) return 1; //dwfl->offline_next_address = 0; // What I thought it was needed if (!dwfl_report_offline(dwfl, "", argv[1], -1)) { dwfl_end(dwfl); return 1; } if (dwfl_report_end(dwfl, NULL, NULL)) { dwfl_end(dwfl); return 1; } char *endp = NULL; GElf_Addr addr = strtoumax(argv[2], &endp, 16), bias; Dwfl_Module *mod = dwfl_addrmodule(dwfl, addr); int width = get_addr_width(mod); printf("0x%.*" PRIx64 "%s", width, addr, "\n"); dwfl_module_getdwarf(mod, &bias); // This line did the trick! const char *name = dwfl_module_addrname(mod, addr + bias); name = name != NULL ? symname(name) : "??"; printf("%s%c", name, '\n'); GElf_Sym s; GElf_Off off = 0; name = dwfl_module_addrinfo(mod, addr + bias, &off, &s, NULL, NULL, NULL); Dwfl_Line *line = dwfl_module_getsrc(mod, addr + bias); if (!line) line = dwfl_getsrc(dwfl, addr + bias); if (line) { int nline, column; const char *filename = dwfl_lineinfo(line, &addr, &nline, &column, NULL, NULL); printf("%s:%i,%i\n", filename, nline, column); } else { printf("??:0\n"); } dwfl_end(dwfl); return 0; } > Thanks, > > Mark