summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dwflpp.cxx39
-rw-r--r--dwflpp.h2
-rw-r--r--runtime/uprobes-common.c4
-rw-r--r--systemtap.spec1
-rw-r--r--tapsets.cxx11
-rw-r--r--testsuite/systemtap.base/sdt_misc.exp11
6 files changed, 19 insertions, 49 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index 7dd31d06..e6fe017d 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -2771,45 +2771,6 @@ dwflpp::relocate_address(Dwarf_Addr dw_addr, string& reloc_section)
return reloc_addr;
}
-/* Converts a "global" literal address to the module symbol address
- * space. If necessary (not for kernel and executables using absolute
- * addresses), this adjust the address for the current module symbol
- * bias. Literal addresses are provided by the user (or contained on
- * the .probes section) based on the "on disk" layout of the module.
- */
-Dwarf_Addr
-dwflpp::literal_addr_to_sym_addr(Dwarf_Addr lit_addr)
-{
- if (sess.verbose > 2)
- clog << "literal_addr_to_sym_addr 0x" << hex << lit_addr << dec << endl;
-
- // Assume the address came from the symbol list.
- // If we cannot get the symbol bias fall back on the dw bias.
- // The kernel (and other absolute executable modules) is special though.
- if (module_name != TOK_KERNEL
- && dwfl_module_relocations (module) > 0)
- {
- Dwarf_Addr symbias = ~0;
- if (dwfl_module_getsymtab (module) != -1)
- dwfl_module_info (module, NULL, NULL, NULL, NULL,
- &symbias, NULL, NULL);
-
- if (sess.verbose > 3)
- clog << "symbias 0x" << hex << symbias << dec
- << ", dwbias 0x" << hex << module_bias << dec << endl;
-
- if (symbias == (Dwarf_Addr) ~0)
- symbias = module_bias;
-
- lit_addr += symbias;
- }
-
- if (sess.verbose > 2)
- clog << "literal_addr_to_sym_addr ret 0x" << hex << lit_addr << dec << endl;
-
- return lit_addr;
-}
-
/* Returns the call frame address operations for the given program counter
* in the libdw address space.
*/
diff --git a/dwflpp.h b/dwflpp.h
index cdc6ad98..523dd883 100644
--- a/dwflpp.h
+++ b/dwflpp.h
@@ -284,8 +284,6 @@ struct dwflpp
Dwarf_Addr relocate_address(Dwarf_Addr addr, std::string& reloc_section);
- Dwarf_Addr literal_addr_to_sym_addr(Dwarf_Addr lit_addr);
-
private:
DwflPtr dwfl_ptr;
diff --git a/runtime/uprobes-common.c b/runtime/uprobes-common.c
index 58e3a05f..17ed69fc 100644
--- a/runtime/uprobes-common.c
+++ b/runtime/uprobes-common.c
@@ -37,7 +37,7 @@ static int stap_uprobe_change_plus (struct task_struct *tsk, unsigned long reloc
if (likely(sups->tfi != tfi)) continue;
/* skip probes with an address beyond this map event; should not
happen unless a shlib/exec got mmapped in weirdly piecemeal */
- if (likely((vm_flags & VM_EXEC) && ((sups->address >= length) || (sups->sdt_sem_offset >= length)))) continue;
+ if (likely((vm_flags & VM_EXEC) && sups->address >= length)) continue;
/* Found a uprobe_spec for this stap_uprobe_tf. Need to lock the
stap_uprobes[] array to allocate a free spot, but then we can
@@ -159,7 +159,7 @@ static int stap_uprobe_change_semaphore_plus (struct task_struct *tsk, unsigned
_stp_dbug(__FUNCTION__,__LINE__, "+semaphore %#x @ %#lx spec %d idx %d task %d\n", sdt_semaphore, sup->sdt_sem_address, sup->spec_index, i, tsk->tgid);
}
#endif
- rc = put_user (sdt_semaphore, (unsigned short __user*) sup->sdt_sem_address);
+ rc = put_user (sdt_semaphore, (unsigned short __user*) sup->sdt_sem_address);
/* XXX: need to analyze possibility of race condition */
}
}
diff --git a/systemtap.spec b/systemtap.spec
index 17eff400..3a0a1205 100644
--- a/systemtap.spec
+++ b/systemtap.spec
@@ -457,7 +457,6 @@ exit 0
%{_libexecdir}/%{name}/stap-stop-server
%{_libexecdir}/%{name}/stap-gen-cert
%{_libexecdir}/%{name}/stap-server-connect
-%{_libexecdir}/%{name}/stap-server-request
%{_libexecdir}/%{name}/stap-sign-module
%{_mandir}/man8/stap-server.8*
%{_mandir}/man8/stap-authorize-server-cert.8*
diff --git a/tapsets.cxx b/tapsets.cxx
index 071f92db..d5c6b25e 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -761,6 +761,13 @@ dwarf_query::query_module_dwarf()
// number plus the module's bias.
Dwarf_Addr addr = has_function_num ?
function_num_val : statement_num_val;
+
+ // These are raw addresses, we need to know what the elf_bias
+ // is to feed it to libdwfl based functions.
+ Dwarf_Addr elf_bias;
+ Elf *elf = dwfl_module_getelf (dw.module, &elf_bias);
+ assert(elf);
+ addr += elf_bias;
query_addr(addr, this);
}
else
@@ -1168,8 +1175,8 @@ query_addr(Dwarf_Addr addr, dwarf_query *q)
{
dwflpp &dw = q->dw;
- // Translate to and actual sumbol address.
- addr = dw.literal_addr_to_sym_addr(addr);
+ if (q->sess.verbose > 2)
+ clog << "query_addr 0x" << hex << addr << dec << endl;
// First pick which CU contains this address
Dwarf_Die* cudie = dw.query_cu_containing_address(addr);
diff --git a/testsuite/systemtap.base/sdt_misc.exp b/testsuite/systemtap.base/sdt_misc.exp
index 74ebdc4e..3ba38c45 100644
--- a/testsuite/systemtap.base/sdt_misc.exp
+++ b/testsuite/systemtap.base/sdt_misc.exp
@@ -74,13 +74,13 @@ int
main ()
{
#ifdef LOOP
+ #include <signal.h>
+ signal (SIGINT, &int_handler);
+ signal (SIGALRM, &alrm_handler);
alarm (30);
while (!loop_check())
{
}
- #include <signal.h>
- signal (SIGINT, &int_handler);
- signal (SIGALRM, &alrm_handler);
#endif
bar(2);
baz(3,(char*)\"abc\");
@@ -379,6 +379,11 @@ if {$ok == 5} {
# 5. Test attaching to a running process with markers in a shared object
if { $pbtype_mssg != "kprobe" } {
+set loop_flags "additional_flags=-I$srcdir/../includes/sys"
+set loop_flags "$loop_flags additional_flags=-I$sdtdir"
+set loop_flags "$loop_flags additional_flags=-g"
+set loop_flags "$loop_flags additional_flags=-I. $pbtype_flag"
+set loop_flags "$loop_flags additional_flags=-DLOOP"
set loop_flags "$loop_flags additional_flags=-DONLY_MAIN"
set loop_flags "$loop_flags additional_flags=-Wl,-rpath,[pwd]"
set loop_flags "$loop_flags additional_flags=-L[pwd] additional_flags=-lsdt-$pbtype_mssg"