From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 71911 invoked by alias); 23 Aug 2016 11:24:50 -0000 Mailing-List: contact systemtap-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org Received: (qmail 71899 invoked by uid 89); 23 Aug 2016 11:24:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 spammy=Mentioned, H*Ad:U*hemant X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 23 Aug 2016 11:24:48 +0000 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.11/8.16.0.11) with SMTP id u7NBOALU135041 for ; Tue, 23 Aug 2016 07:24:46 -0400 Received: from e28smtp08.in.ibm.com (e28smtp08.in.ibm.com [125.16.236.8]) by mx0b-001b2d01.pphosted.com with ESMTP id 24ybnkwvma-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 23 Aug 2016 07:24:46 -0400 Received: from localhost by e28smtp08.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 23 Aug 2016 16:54:42 +0530 Received: from d28dlp01.in.ibm.com (9.184.220.126) by e28smtp08.in.ibm.com (192.168.1.138) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 23 Aug 2016 16:54:40 +0530 X-IBM-Helo: d28dlp01.in.ibm.com X-IBM-MailFrom: ravi.bangoria@linux.vnet.ibm.com X-IBM-RcptTo: systemtap@sourceware.org Received: from d28relay03.in.ibm.com (d28relay03.in.ibm.com [9.184.220.60]) by d28dlp01.in.ibm.com (Postfix) with ESMTP id 0D404E0040 for ; Tue, 23 Aug 2016 16:59:17 +0530 (IST) Received: from d28av02.in.ibm.com (d28av02.in.ibm.com [9.184.220.64]) by d28relay03.in.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id u7NBOcda10879324 for ; Tue, 23 Aug 2016 16:54:38 +0530 Received: from d28av02.in.ibm.com (localhost [127.0.0.1]) by d28av02.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id u7NBOb40007932 for ; Tue, 23 Aug 2016 16:54:37 +0530 Received: from f24-tul163-qemu.localdomain (tul163p1.aus.stglabs.ibm.com [9.41.165.219]) by d28av02.in.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id u7NBOXjw007726; Tue, 23 Aug 2016 16:54:34 +0530 From: Ravi Bangoria To: systemtap@sourceware.org Cc: hemant@linux.vnet.ibm.com, atrajeev@linux.vnet.ibm.com, mjw@redhat.com, fche@redhat.com, dsmith@redhat.com, naveen.n.rao@linux.vnet.ibm.com, Ravi Bangoria Subject: [PATCH v3 1/2] ppc64le: Store correct function entry address in symbol_table Date: Tue, 23 Aug 2016 11:24:00 -0000 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16082311-0056-0000-0000-000002D36F83 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16082311-0057-0000-0000-00000F9D5CAA Message-Id: <1471951468-2567-1-git-send-email-ravi.bangoria@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-08-23_06:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=4 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1604210000 definitions=main-1608230114 X-SW-Source: 2016-q3/txt/msg00196.txt.bz2 PPC64 ELF ABI v2 has a Global Entry Point and a Local Entry Point for the functions. Debuginfo of ELF contains GEP which is same as entrypc while symbol table contains GEP and offset, from which we can calculate LEP. LEP is used to call function within single CU, when TOC pointer update is not required. Placing a probe on LEP catches call from both the GEP and the LEP but, by default, systemtap probes on GEP. For ppc64le, Systemtap stores LEP in symbol table and prioritize symbol table over debuginfo. But, storing LEP in symbol table has couple of regression effect. As LEP is only required at a time of adding a probe, don't store it in symbol table. No need to prioritize symbol table as well because debuginfo and symbol table both will contain Global Entry Point. Revert commit b4c6a4b1cd00 ("Prioritize symbol table lookup for ppc64le") partially. Signed-off-by: Ravi Bangoria --- Changes in v3: - Mentioned commit reverted by this patch. tapsets.cxx | 62 +------------------------------------------------------------ 1 file changed, 1 insertion(+), 61 deletions(-) diff --git a/tapsets.cxx b/tapsets.cxx index 35f562b..997cc88 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -2142,18 +2142,6 @@ query_dwarf_inline_instance (Dwarf_Die * die, dwarf_query * q) } } -static bool -is_filtered_func_exists (func_info_map_t const& filtered, func_info *fi) -{ - for (unsigned i = 0; i < filtered.size(); i++) - { - if ((filtered[i].entrypc == fi->entrypc) && (filtered[i].name == fi->name)) - return true; - } - - return false; -} - static int query_dwarf_func (Dwarf_Die * func, dwarf_query * q) { @@ -2206,37 +2194,7 @@ query_dwarf_func (Dwarf_Die * func, dwarf_query * q) q->dw.function_line (&func.decl_line); Dwarf_Addr entrypc; - - func.entrypc = 0; - Dwarf_Addr bias; - Dwfl_Module *mod = q->dw.module; - Elf* elf = (dwarf_getelf (dwfl_module_getdwarf (mod, &bias)) - ?: dwfl_module_getelf (mod, &bias)); - - GElf_Ehdr ehdr_mem; - GElf_Ehdr* em = gelf_getehdr (elf, &ehdr_mem); - if (em == NULL) throw SEMANTIC_ERROR (_("Couldn't get elf header")); - - /* Giving priority to sym_table for ppc64*/ - if ((em->e_machine == EM_PPC64) && ((em->e_flags & EF_PPC64_ABI) == 2) - && (q->dw.mod_info->sym_table)) - { - /* The linkage name is the best match for the symbol table. */ - const string& linkage_name = dwarf_linkage_name(&func.die) - ?: dwarf_diename(&func.die) ?: (string)func.name; - - const auto& fis = q->dw.mod_info->sym_table->lookup_symbol(linkage_name); - for (auto it=fis.begin(); it!=fis.end() ; ++it) - { - func.entrypc = (*it)->entrypc; - if (is_filtered_func_exists(q->filtered_functions, &func)) - continue; - q->filtered_functions.push_back(func); - } - } - - /* If not ppc64 or not found in sym_table, try it directly. */ - if (!func.entrypc && q->dw.function_entrypc (&entrypc)) + if (q->dw.function_entrypc (&entrypc)) { func.entrypc = entrypc; q->filtered_functions.push_back (func); @@ -8504,13 +8462,6 @@ symbol_table::get_from_elf() int syments = dwfl_module_getsymtab(mod); assert(syments); prepare_section_rejection(mod); - Dwarf_Addr bias; - Elf* elf = (dwarf_getelf (dwfl_module_getdwarf (mod, &bias)) - ?: dwfl_module_getelf (mod, &bias)); - - GElf_Ehdr ehdr_mem; - GElf_Ehdr* em = gelf_getehdr (elf, &ehdr_mem); - if (em == NULL) throw SEMANTIC_ERROR (_("Couldn't get elf header")); for (int i = 1; i < syments; ++i) { @@ -8543,18 +8494,7 @@ symbol_table::get_from_elf() continue; interned_string name = n; - /* - * For ELF ABI v2 on PPC64 LE, we need to adjust sym.st_value corresponding - * to the bits of sym.st_other. These bits will tell us what's the offset - * of the local entry point from the global entry point. - * - * st_other field is currently only used with ABIv2 on ppc64 - */ Dwarf_Addr entrypc = addr; - if ((em->e_machine == EM_PPC64) && ((em->e_flags & EF_PPC64_ABI) == 2) - && (GELF_ST_TYPE(sym.st_info) == STT_FUNC) && sym.st_other) - entrypc += PPC64_LOCAL_ENTRY_OFFSET(sym.st_other); - if (GELF_ST_TYPE(sym.st_info) == STT_FUNC) add_symbol(name, (GELF_ST_BIND(sym.st_info) == STB_WEAK), reject, addr, entrypc); -- 1.8.3.1