rpms/ltrace/devel ltrace-0.4-exec.patch, NONE, 1.1 ltrace-0.4-fork.patch, NONE, 1.1 ltrace-0.5-a2bp.patch, NONE, 1.1 ltrace-0.5-attach.patch, NONE, 1.1 ltrace-0.5-ppc-symval.patch, NONE, 1.1 ltrace-ppc32fc5.patch, 1.3, 1.4 ltrace.spec, 1.52, 1.53 1152117672-exec-patch, 1.1, NONE 1153220107-fork-patch, 1.1, NONE ltrace-0.5-ppc32-2.patch, 1.1, NONE
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Mon Sep 4 11:47:27 UTC 2006
Author: pmachata
Update of /cvs/dist/rpms/ltrace/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv11078
Modified Files:
ltrace-ppc32fc5.patch ltrace.spec
Added Files:
ltrace-0.4-exec.patch ltrace-0.4-fork.patch
ltrace-0.5-a2bp.patch ltrace-0.5-attach.patch
ltrace-0.5-ppc-symval.patch
Removed Files:
1152117672-exec-patch 1153220107-fork-patch
ltrace-0.5-ppc32-2.patch
Log Message:
- fix plt handling on ppc32 (symval patch)
- fix attaching to process (attach patch)
- add fork & exec patches from IBM
- adjust weak symbol handling (ppc32fc5 patch)
ltrace-0.4-exec.patch:
process_event.fix | 3 ---
1 files changed, 3 deletions(-)
--- NEW FILE ltrace-0.4-exec.patch ---
--- process_event.c 2006-02-20 16:48:07.000000000 -0500
+++ process_event.fix 2006-07-04 04:20:27.000000000 -0400
@@ -239,7 +239,6 @@ static void process_sysret(struct event
sysname(event->proc, event->e_un.sysnum));
}
if (exec_p(event->proc, event->e_un.sysnum)) {
- if (gimme_arg(LT_TOF_SYSCALLR, event->proc, -1) == 0) {
pid_t saved_pid;
event->proc->mask_32bit = 0;
event->proc->personality = 0;
@@ -251,8 +250,6 @@ static void process_sysret(struct event
event->proc->pid = 0;
breakpoints_init(event->proc);
event->proc->pid = saved_pid;
- } else
- enable_all_breakpoints(event->proc);
}
continue_process(event->proc->pid);
}
ltrace-0.4-fork.patch:
ltrace.h | 5 +++--
proc.c | 8 +++++---
process_event.c | 10 ----------
sysdeps/linux-gnu/trace.c | 32 +++++++++++++++++++++++++++++---
wait_for_something.c | 22 ++++++++++++++++++++--
5 files changed, 57 insertions(+), 20 deletions(-)
--- NEW FILE ltrace-0.4-fork.patch ---
diff -Naurp ltrace-0.4/ltrace.h ltrace-0.4-Getmsg/ltrace.h
--- ltrace-0.4/ltrace.h 2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/ltrace.h 2006-07-18 02:23:36.000000000 -0400
@@ -12,6 +12,7 @@
#include "sysdep.h"
#define MAX_LIBRARY 30
+#define TRACE_FORK 1
#if defined HAVE_LIBIBERTY || defined HAVE_LIBSUPC__
# define USE_DEMANGLE
@@ -170,7 +171,7 @@ extern void show_summary(void);
/* Arch-dependent stuff: */
extern char *pid2name(pid_t pid);
-extern void trace_set_options(struct process *proc, pid_t pid);
+extern void trace_set_options(struct process *proc, pid_t pid, int option);
extern void trace_me(void);
extern int trace_pid(pid_t pid);
extern void untrace_pid(pid_t pid);
@@ -198,5 +199,5 @@ extern void *plt2addr(struct process *,
#if 0 /* not yet */
extern int umoven(struct process *proc, void *addr, int len, void *laddr);
#endif
-
+extern ulong get_child_pid(pid_t pid);
#endif
diff -Naurp ltrace-0.4/proc.c ltrace-0.4-Getmsg/proc.c
--- ltrace-0.4/proc.c 2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/proc.c 2006-07-17 06:00:36.000000000 -0400
@@ -22,10 +22,11 @@ struct process *open_program(char *filen
}
proc->filename = filename;
proc->breakpoints_enabled = -1;
+ proc->pid = 0;
+ breakpoints_init(proc);
if (pid) {
proc->pid = pid;
}
- breakpoints_init(proc);
proc->next = list_of_processes;
list_of_processes = proc;
@@ -37,11 +38,13 @@ void open_pid(pid_t pid, int verbose)
struct process *proc;
char *filename;
+#if 0
if (trace_pid(pid) < 0) {
fprintf(stderr, "Cannot attach to pid %u: %s\n", pid,
strerror(errno));
return;
}
+#endif
filename = pid2name(pid);
@@ -54,7 +57,6 @@ void open_pid(pid_t pid, int verbose)
return;
}
#endif
-
proc = open_program(filename, pid);
- proc->breakpoints_enabled = 1;
+ proc->breakpoints_enabled = -1;
}
diff -Naurp ltrace-0.4/process_event.c ltrace-0.4-Getmsg/process_event.c
--- ltrace-0.4/process_event.c 2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/process_event.c 2006-07-18 03:05:16.000000000 -0400
@@ -223,16 +223,6 @@ static void process_sysret(struct event
if (opt_T || opt_c) {
calc_time_spent(event->proc);
}
- if (fork_p(event->proc, event->e_un.sysnum)) {
- if (opt_f) {
- pid_t child =
- gimme_arg(LT_TOF_SYSCALLR, event->proc, -1);
- if (child > 0) {
- open_pid(child, 0);
- }
- }
- enable_all_breakpoints(event->proc);
- }
callstack_pop(event->proc);
if (opt_S) {
output_right(LT_TOF_SYSCALLR, event->proc,
diff -Naurp ltrace-0.4/sysdeps/linux-gnu/trace.c ltrace-0.4-Getmsg/sysdeps/linux-gnu/trace.c
--- ltrace-0.4/sysdeps/linux-gnu/trace.c 2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/sysdeps/linux-gnu/trace.c 2006-07-18 02:49:35.000000000 -0400
@@ -90,7 +90,7 @@ int trace_pid(pid_t pid)
return 0;
}
-void trace_set_options(struct process *proc, pid_t pid)
+void trace_set_options(struct process *proc, pid_t pid, int option)
{
#ifndef PTRACE_SETOPTIONS
#define PTRACE_SETOPTIONS 0x4200
@@ -101,10 +101,21 @@ void trace_set_options(struct process *p
#ifndef PTRACE_O_TRACESYSGOOD
#define PTRACE_O_TRACESYSGOOD 0x00000001
#endif
+#ifndef PTRACE_O_TRACEFORK
+#define PTRACE_O_TRACEFORK 0x00000002
+#endif
+
+ ulong setoptions = 0;
+
if (proc->tracesysgood & 0x80)
return;
- if (ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD) < 0 &&
- ptrace(PTRACE_OLDSETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD) < 0) {
+
+ setoptions |= PTRACE_O_TRACESYSGOOD;
+ if (TRACE_FORK == option){
+ setoptions |= PTRACE_O_TRACEFORK;
+ }
+ if (ptrace(PTRACE_SETOPTIONS, pid, 0, setoptions) < 0 &&
+ ptrace(PTRACE_OLDSETOPTIONS, pid, 0, PTRACE_O_TRACESYSGOOD) < 0){
perror("PTRACE_SETOPTIONS");
return;
}
@@ -175,3 +186,18 @@ int umovestr(struct process *proc, void
*(char *)(laddr + offset) = '\0';
return 0;
}
+
+ulong get_child_pid(pid_t pid)
+{
+#ifndef PTRACE_GETEVENTMSG
+#define PTRACE_GETEVENTMSG 0x4201
+#endif
+ ulong child_pid = 9999;
+
+ if( ptrace(PTRACE_GETEVENTMSG, pid, 0, &child_pid) < 0) {
+ perror("PTRACE_GETEVENTMSG");
+ return 0;
+ }
+ return child_pid;
+}
+
diff -Naurp ltrace-0.4/wait_for_something.c ltrace-0.4-Getmsg/wait_for_something.c
--- ltrace-0.4/wait_for_something.c 2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.4-Getmsg/wait_for_something.c 2006-07-18 02:32:26.000000000 -0400
@@ -14,15 +14,17 @@
#include "options.h"
#include "debug.h"
+#define FORK_MASK 0x00010000
static struct event event;
/* This should also update `current_process' */
static struct process *pid2proc(int pid);
+void verify(int sig_status);
struct event *wait_for_something(void)
{
- pid_t pid;
+ pid_t pid, child_pid;
int status;
int tmp;
@@ -54,7 +56,11 @@ struct event *wait_for_something(void)
if (event.proc->breakpoints_enabled == -1) {
enable_all_breakpoints(event.proc);
event.thing = LT_EV_NONE;
- trace_set_options(event.proc, event.proc->pid);
+ if(opt_f){
+ trace_set_options(event.proc, event.proc->pid, TRACE_FORK);
+ }else{
+ trace_set_options(event.proc, event.proc->pid, 0);
+ }
continue_process(event.proc->pid);
return &event;
}
@@ -92,6 +98,17 @@ struct event *wait_for_something(void)
event.e_un.signum = WSTOPSIG(status);
return &event;
}
+ if((WSTOPSIG(status) == SIGTRAP) && (status & FORK_MASK)) {
+ event.thing = LT_EV_NONE;
+ event.e_un.signum = WSTOPSIG(status);
+ child_pid = (pid_t) get_child_pid(event.proc->pid);
+ if (child_pid){
+ open_pid(child_pid,0);
+ }
+ enable_all_breakpoints(event.proc);
+ continue_after_signal(event.proc->pid, event.e_un.signum);
+ return &event;
+ }
event.thing = LT_EV_BREAKPOINT;
if (!event.proc->instruction_pointer) {
event.proc->instruction_pointer =
@@ -115,3 +132,4 @@ static struct process *pid2proc(pid_t pi
}
return NULL;
}
+
ltrace-0.5-a2bp.patch:
breakpoints.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletion(-)
--- NEW FILE ltrace-0.5-a2bp.patch ---
diff -Bburp ltrace-0.5/breakpoints.c ltrace-0.5-pm/breakpoints.c
--- ltrace-0.5/breakpoints.c 2006-08-30 08:03:25.000000000 -0400
+++ ltrace-0.5-pm/breakpoints.c 2006-08-30 08:02:39.000000000 -0400
@@ -20,6 +20,10 @@
struct breakpoint *address2bpstruct(struct process *proc, void *addr)
{
+ if (!proc->breakpoints) {
+ proc->breakpoints =
+ dict_init(dict_key2hash_int, dict_key_cmp_int);
+ }
return dict_find_entry(proc->breakpoints, addr);
}
@@ -33,7 +39,6 @@ insert_breakpoint(struct process *proc,
if (!proc->breakpoints) {
proc->breakpoints =
dict_init(dict_key2hash_int, dict_key_cmp_int);
- /* atexit(brk_dict_clear); *//* why bother to do this on exit? */
}
if (!addr)
ltrace-0.5-attach.patch:
proc.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
--- NEW FILE ltrace-0.5-attach.patch ---
--- ltrace-0.5/proc.c 2006-02-20 16:48:07.000000000 -0500
+++ ltrace-0.5-pm/proc.c 2006-09-04 07:14:50.000000000 -0400
@@ -55,6 +55,6 @@ void open_pid(pid_t pid, int verbose)
}
#endif
- proc = open_program(filename, pid);
- proc->breakpoints_enabled = 1;
+ proc = open_program(filename, 0);
+ proc->pid = pid;
}
ltrace-0.5-ppc-symval.patch:
elf.c | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
--- NEW FILE ltrace-0.5-ppc-symval.patch ---
diff -Burp ltrace-0.5-orig/elf.c ltrace-0.5/elf.c
--- ltrace-0.5-orig/elf.c 2006-08-30 02:38:17.000000000 +0200
+++ ltrace-0.5/elf.c 2006-08-30 03:42:30.000000000 +0200
@@ -478,10 +478,17 @@ struct library_symbol *read_elf(struct p
name = lte->dynstr + sym.st_name;
if (in_load_libraries(name, lte)) {
- addr = arch_plt_sym_val(lte, i, &rela);
- add_library_symbol(addr, name, &library_symbols,
- (PLTS_ARE_EXECUTABLE(lte)
- ? LS_TOPLT_EXEC : LS_TOPLT_POINT),
+ enum toplt pltt;
+ if (lte->ehdr.e_machine == EM_PPC) {
+ addr = sym.st_value;
+ pltt = LS_TOPLT_EXEC;
+ }
+ else {
+ addr = arch_plt_sym_val(lte, i, &rela);
+ pltt = (PLTS_ARE_EXECUTABLE(lte)
+ ? LS_TOPLT_EXEC : LS_TOPLT_POINT);
+ }
+ add_library_symbol(addr, name, &library_symbols, pltt,
ELF64_ST_BIND(sym.st_info) == STB_WEAK);
if (!lib_tail)
lib_tail = &(library_symbols->next);
ltrace-ppc32fc5.patch:
breakpoints.c | 5 ++---
elf.c | 6 +++---
output.c | 1 -
sysdeps/linux-gnu/ppc/arch.h | 4 +---
sysdeps/linux-gnu/ppc/plt.c | 8 ++++++--
sysdeps/linux-gnu/ppc/regs.c | 11 +++++++++--
6 files changed, 21 insertions(+), 14 deletions(-)
Index: ltrace-ppc32fc5.patch
===================================================================
RCS file: /cvs/dist/rpms/ltrace/devel/ltrace-ppc32fc5.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ltrace-ppc32fc5.patch 15 Jul 2006 00:51:09 -0000 1.3
+++ ltrace-ppc32fc5.patch 4 Sep 2006 11:47:24 -0000 1.4
@@ -120,33 +120,6 @@
-
-
-#endif
-Index: process_event.c
-===================================================================
---- process_event.c (revision 45)
-+++ process_event.c (working copy)
-@@ -263,7 +263,7 @@ static void process_breakpoint(struct ev
- struct breakpoint *sbp, *nxtbp;
-
- debug(2, "event: breakpoint (%p)", event->e_un.brk_addr);
-- if ((sbp = event->proc->breakpoint_being_enabled) != 0) {
-+ if ((sbp = event->proc->breakpoint_being_enabled) != NULL) {
- #ifdef __powerpc__
- char nop_inst[] = PPC_NOP;
- if (memcmp(sbp->orig_value, nop_inst, PPC_NOP_LENGTH) == 0) {
-@@ -344,8 +344,11 @@ static void process_breakpoint(struct ev
- event->proc->stack_pointer = get_stack_pointer(event->proc);
- event->proc->return_addr =
- get_return_addr(event->proc, event->proc->stack_pointer);
-- output_left(LT_TOF_FUNCTION, event->proc, sbp->libsym->name);
-- callstack_push_symfunc(event->proc, sbp->libsym);
-+ if (!sbp->libsym->is_weak || event->proc->return_addr == NULL) {
-+ debug (2, "libsym name=%s", sbp->libsym->name);
-+ output_left(LT_TOF_FUNCTION, event->proc, sbp->libsym->name);
-+ callstack_push_symfunc(event->proc, sbp->libsym);
-+ }
- #ifdef PLT_REINITALISATION_BP
- if (event->proc->need_to_reinitialize_breakpoints
- && (strcmp(sbp->libsym->name, PLTs_initialized_by_here) ==
Index: breakpoints.c
===================================================================
--- breakpoints.c (revision 45)
Index: ltrace.spec
===================================================================
RCS file: /cvs/dist/rpms/ltrace/devel/ltrace.spec,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- ltrace.spec 30 Aug 2006 02:14:13 -0000 1.52
+++ ltrace.spec 4 Sep 2006 11:47:24 -0000 1.53
@@ -1,13 +1,17 @@
Summary: Tracks runtime library calls from dynamically linked executables.
Name: ltrace
Version: 0.5
-Release: 4.45svn%{?dist}
+Release: 5.45svn%{?dist}
Source: ltrace-0.5.tar.gz
+Patch0: ltrace-0.4-exec.patch
+Patch1: ltrace-0.4-fork.patch
Patch2: ltrace-0.5-opd.patch
Patch3: ltrace-ppc32fc5.patch
Patch4: ltrace-0.5-gnuhash.patch
Patch5: ltrace-0.5-testsuite.patch
-Patch6: ltrace-0.5-ppc32-2.patch
+Patch6: ltrace-0.5-ppc-symval.patch
+Patch7: ltrace-0.5-a2bp.patch
+Patch8: ltrace-0.5-attach.patch
License: GPL
Group: Development/Debuggers
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 s390 s390x alpha sparc
@@ -27,11 +31,14 @@
%prep
%setup -q
+%patch0 -p0
+%patch1 -p1
%patch2 -p1
%patch3 -p0
%patch4 -p1
%patch5 -p1
%patch6 -p1
+%patch8 -p1
sed -i -e 's/-o root -g root//' Makefile.in
%build
@@ -59,9 +66,11 @@
%config /etc/ltrace.conf
%changelog
-* Wed Aug 28 2006 Petr Machata <pmachata at redhat.com> - 0.5-4.45svn
-- enabling testsuite in hunt for testsuite fail on ppc
-- first take on ppc32 testsuite problems...
+* Mon Sep 4 2006 Petr Machata <pmachata at redhat.com> - 0.5-5.45svn
+- fix plt handling on ppc32 (symval patch)
+- fix attaching to process (attach patch)
+- add fork & exec patches from IBM
+- adjust weak symbol handling (ppc32fc5 patch)
* Wed Aug 23 2006 Petr Machata <pmachata at redhat.com> - 0.5-3.45svn
- use "{X}.{release}svn" release string per naming guidelines
--- 1152117672-exec-patch DELETED ---
--- 1153220107-fork-patch DELETED ---
--- ltrace-0.5-ppc32-2.patch DELETED ---
More information about the fedora-cvs-commits
mailing list