Ltrace is broken on ppc64el

Bug #1398143 reported by bugproxy
12
This bug affects 1 person
Affects Status Importance Assigned to Milestone
ltrace (Ubuntu)
Fix Released
High
Mathieu Trudel-Lapierre
Trusty
Incomplete
Low
Mathieu Trudel-Lapierre
Wily
Won't Fix
Low
Mathieu Trudel-Lapierre

Bug Description

[Impact]
ppc64el users of ltrace.

[Test cases]
- ltrace `which ls`
- ltrace /bin/ls /usr
- ltrace ps
- ltrace make (building ltrace itself, for instance)

[Regression potential]
While the changes should fix some of the more common uses of ltrace, the added/modified methods and options may break for some specific calls on ppc64el, or on other architectures (powerpc, arm) which are affected by the changes.

ARM was already failing with the available version of ltrace; this would not change the behavior on ARM.

---

ltrace is not working properly on Ubuntu 15.04 ppc64el.

Example:
ubuntu@ubuntu1504:~$ ltrace `which ls`
__printf_chk(1, 0x3fffd36dce78, 0x3fffd36dce88, 0x3fffd36dcf28 <unfinished ...>
...
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++

There is a patch that fixes this issue:

http://lists.alioth.debian.org/pipermail/ltrace-devel/2014-February/001027.html

In order to get the ppc64el, the idea is to get the upstream tree and do a reset until commit eea4ad2cce289753aaa35b4e0258a76d8f8f367c
That would allow to create a patch of 27514 lines

ppc64el_support:--- ltrace-0.7.3.orig/CREDITS
ppc64el_support:--- ltrace-0.7.3.orig/Makefile.am
ppc64el_support:--- ltrace-0.7.3.orig/NEWS
ppc64el_support:--- ltrace-0.7.3.orig/README
ppc64el_support:--- ltrace-0.7.3.orig/TODO
ppc64el_support:--- ltrace-0.7.3.orig/backend.h
ppc64el_support:--- ltrace-0.7.3.orig/breakpoint.h
ppc64el_support:--- ltrace-0.7.3.orig/breakpoints.c
ppc64el_support:--- ltrace-0.7.3.orig/callback.h
ppc64el_support:--- ltrace-0.7.3.orig/common.h
ppc64el_support:--- ltrace-0.7.3.orig/configure.ac
ppc64el_support:--- ltrace-0.7.3.orig/debug.c
ppc64el_support:--- ltrace-0.7.3.orig/debug.h
ppc64el_support:--- ltrace-0.7.3.orig/demangle.c
ppc64el_support:--- ltrace-0.7.3.orig/demangle.h
ppc64el_support:--- ltrace-0.7.3.orig/dict.c
ppc64el_support:--- ltrace-0.7.3.orig/dict.h
ppc64el_support:--- ltrace-0.7.3.orig/execute_program.c
ppc64el_support:--- ltrace-0.7.3.orig/expr.c
ppc64el_support:--- ltrace-0.7.3.orig/expr.h
ppc64el_support:--- ltrace-0.7.3.orig/fetch.c
ppc64el_support:--- ltrace-0.7.3.orig/fetch.h
ppc64el_support:--- ltrace-0.7.3.orig/filter.h
ppc64el_support:--- ltrace-0.7.3.orig/forward.h
ppc64el_support:--- ltrace-0.7.3.orig/glob.c
ppc64el_support:--- ltrace-0.7.3.orig/handle_event.c
ppc64el_support:--- ltrace-0.7.3.orig/lens_default.c
ppc64el_support:--- ltrace-0.7.3.orig/libltrace.c
ppc64el_support:--- ltrace-0.7.3.orig/library.c
ppc64el_support:--- ltrace-0.7.3.orig/library.h
ppc64el_support:--- ltrace-0.7.3.orig/ltrace-elf.c
ppc64el_support:--- ltrace-0.7.3.orig/ltrace-elf.h
ppc64el_support:--- ltrace-0.7.3.orig/ltrace.1
ppc64el_support:--- ltrace-0.7.3.orig/ltrace.conf.5
ppc64el_support:--- ltrace-0.7.3.orig/ltrace.h
ppc64el_support:--- ltrace-0.7.3.orig/options.c
ppc64el_support:--- ltrace-0.7.3.orig/options.h
ppc64el_support:--- ltrace-0.7.3.orig/output.c
ppc64el_support:--- ltrace-0.7.3.orig/output.h
ppc64el_support:--- ltrace-0.7.3.orig/param.c
ppc64el_support:--- ltrace-0.7.3.orig/param.h
ppc64el_support:--- ltrace-0.7.3.orig/printf.c
ppc64el_support:--- ltrace-0.7.3.orig/proc.c
ppc64el_support:--- ltrace-0.7.3.orig/proc.h
ppc64el_support:--- ltrace-0.7.3.orig/read_config_file.c
ppc64el_support:--- ltrace-0.7.3.orig/read_config_file.h
ppc64el_support:--- ltrace-0.7.3.orig/summary.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/Makefile.am
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/alpha/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/alpha/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/alpha/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/arm/Makefile.am
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/arm/arch.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/arm/breakpoint.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/arm/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/arm/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/arm/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/breakpoint.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/cris/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/cris/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/cris/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/events.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/events.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ia64/fetch.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ia64/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ia64/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ia64/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/m68k/fetch.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/m68k/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/m68k/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/m68k/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/mips/arch.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/mips/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/mips/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/mips/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/os.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ppc/arch.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ppc/fetch.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ppc/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ppc/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/ppc/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/proc.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/s390/arch.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/s390/fetch.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/s390/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/s390/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/s390/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/sparc/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/sparc/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/sparc/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/trace.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/x86/arch.h
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/x86/fetch.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/x86/plt.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/x86/regs.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/linux-gnu/x86/trace.c
ppc64el_support:--- ltrace-0.7.3.orig/sysdeps/sysdep.h
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/Makefile.am
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/lib/ltrace.exp
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.main/Makefile.am
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.main/parameters-lib.c
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.main/parameters.c
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.main/parameters.conf
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.main/parameters.exp
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.main/parameters2.exp
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.main/system_calls.exp
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.minor/Makefile.am
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.minor/trace-clone.c
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.minor/trace-exec.exp
ppc64el_support:--- ltrace-0.7.3.orig/testsuite/ltrace.torture/Makefile.am
ppc64el_support:--- ltrace-0.7.3.orig/type.c
ppc64el_support:--- ltrace-0.7.3.orig/type.h
ppc64el_support:--- ltrace-0.7.3.orig/value.c
ppc64el_support:--- ltrace-0.7.3.orig/value.h
ppc64el_support:--- ltrace-0.7.3.orig/vect.c
ppc64el_support:--- ltrace-0.7.3.orig/vect.h
ppc64el_support:--- ltrace-0.7.3.orig/zero.c

from that stage there is a need to apply a patch to avoid dwarf compilation error:
--- ltrace-0.7.3.orig/dwarf_prototypes.h
+++ ltrace-0.7.3/dwarf_prototypes.h
@@ -1,7 +1,6 @@
 #pragma once

 #include <stdbool.h>
-#include <elfutils/libdwfl.h>

 #include "prototype.h"
 #include "library.h"

and a patch to configure.ac
--- ltrace-0.7.3.orig/configure.ac
+++ ltrace-0.7.3/configure.ac
@@ -42,7 +43,7 @@ case "${host_cpu}" in
     arm*|sa110) HOST_CPU="arm" ;;
     cris*) HOST_CPU="cris" ;;
     mips*) HOST_CPU="mips" ;;
- powerpc|powerpc64) HOST_CPU="ppc" ;;
+ powerpc|powerpc64|powerpc64le) HOST_CPU="ppc" ;;
     sun4u|sparc64) HOST_CPU="sparc" ;;
     s390x) HOST_CPU="s390" ;;
     i?86|x86_64) HOST_CPU="x86" ;;

let us know if you want a patch or if you get the source from upstream

It may also be required to backport the following patches:
03-alpha-debug.h
06-unexpected-breakpoint
ptrace.diff

Fix to allow compilation of parameters-hfa.exp is
diff --git a/testsuite/lib/ltrace.exp b/testsuite/lib/ltrace.exp
index 9931794..aa9d240 100644
--- a/testsuite/lib/ltrace.exp
+++ b/testsuite/lib/ltrace.exp
@@ -110,6 +110,7 @@ proc ltrace_compile {source dest type options} {

     set result [target_compile $source $dest $type $options];
     verbose "result is $result"
+ regsub ".* note: .*$" "$result" "" result;
     regsub "\[\r\n\]*$" "$result" "" result;
     regsub "^\[\r\n\]*" "$result" "" result;
     if { $result != "" && [lsearch $options quiet] == -1} {

Current dev git tree reset to commit :
eea4ad2cce289753aaa35b4e0258a76d8f8f367c
or more recent
bc7551c18a2ea7b3baf51a35396fe642066f02e6

are compiling and tested with only 4 errors.

== Comment: #8 - Thierry Fauck <email address hidden> - 2014-11-28 11:06:41 ==
New fix to allow full testing:
diff --git a/sysdeps/linux-gnu/ppc/fetch.c b/sysdeps/linux-gnu/ppc/fetch.c
index c9381c3..5c1dc3a 100644
--- a/sysdeps/linux-gnu/ppc/fetch.c
+++ b/sysdeps/linux-gnu/ppc/fetch.c
@@ -378,7 +378,8 @@ allocate_hfa(struct fetch_context *ctx, struct process *proc
                /* Hetereogeneous struct - get value on GPR or stack. */
                if (((hfa_type == ARGTYPE_FLOAT
                    || hfa_type == ARGTYPE_DOUBLE)
- && hfa_count <= 8))
+ && hfa_count <= 8
+ && ctx->struct_hfa_count <= 8 ))
                        rc = allocate_float(ctx, proc, hfa_info, &tmp,
                                                slot_off, true);
                else

== Comment: #9 - Thierry Fauck <email address hidden> - 2014-11-28 11:10:36 ==
As last patch allow full tesing with both sources, changing state
Test Run By root on Fri Nov 28 11:08:10 2014
Native configuration is powerpc64le-unknown-linux-gnu

  === tests ===

Schedule of variations:
    unix

Running target unix
Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target.
Using /usr/share/dejagnu/config/unix.exp as generic interface file for target.
Using ./config/unix.exp as tool-and-target-specific interface file.
Running ./ltrace.main/branch_func.exp ...
Running ./ltrace.main/filters.exp ...
Running ./ltrace.main/hello-vfork.exp ...
Running ./ltrace.main/main-internal.exp ...
Running ./ltrace.main/main-threaded.exp ...
Running ./ltrace.main/main-vfork.exp ...
Running ./ltrace.main/main.exp ...
Running ./ltrace.main/parameters-hfa.exp ...
Running ./ltrace.main/parameters.exp ...
Running ./ltrace.main/parameters2.exp ...
Running ./ltrace.main/parameters3.exp ...
Running ./ltrace.main/signals.exp ...
Running ./ltrace.main/system_call_params.exp ...
Running ./ltrace.main/system_calls.exp ...
Running ./ltrace.minor/attach-process-dlopen.exp ...
Running ./ltrace.minor/attach-process.exp ...
Running ./ltrace.minor/count-record.exp ...
Running ./ltrace.minor/demangle.exp ...
Running ./ltrace.minor/libdl-simple.exp ...
Running ./ltrace.minor/print-instruction-pointer.exp ...
Running ./ltrace.minor/time-record-T.exp ...
Running ./ltrace.minor/time-record-tt.exp ...
Running ./ltrace.minor/time-record-ttt.exp ...
Running ./ltrace.minor/trace-clone.exp ...
Running ./ltrace.minor/trace-exec.exp ...
Running ./ltrace.minor/trace-fork.exp ...
Running ./ltrace.minor/trace-irelative.exp ...
Running ./ltrace.minor/wchar.exp ...
Running ./ltrace.torture/arm-singlestep.exp ...
Running ./ltrace.torture/ia64-sigill.exp ...
Running ./ltrace.torture/ppc-lwarx.exp ...
Running ./ltrace.torture/signals.exp ...
Running ./ltrace.torture/vfork-thread.exp ...

  === Summary ===

# of expected passes 348
# of unsupported tests 1

bugproxy (bugproxy)
tags: added: architecture-ppc64le bugnameltc-119208 severity-high targetmilestone-inin1504
Luciano Chavez (lnx1138)
affects: ubuntu → ltrace (Ubuntu)
Revision history for this message
bugproxy (bugproxy) wrote : Comment bridged from LTC Bugzilla

------- Comment From <email address hidden> 2014-12-12 16:29 EDT-------
*** Bug 113207 has been marked as a duplicate of this bug. ***

Revision history for this message
bugproxy (bugproxy) wrote :

------- Comment From <email address hidden> 2015-01-16 10:44 EDT-------
*** Bug 119939 has been marked as a duplicate of this bug. ***

------- Comment From <email address hidden> 2015-01-16 10:45 EDT-------
*** Bug 115768 has been marked as a duplicate of this bug. ***

Changed in ltrace (Ubuntu):
status: New → Confirmed
assignee: nobody → Taco Screen team (taco-screen-team)
Steve Langasek (vorlon)
Changed in ltrace (Ubuntu):
importance: Undecided → High
status: Confirmed → Triaged
Changed in ltrace (Ubuntu Trusty):
importance: Undecided → Low
Steve Langasek (vorlon)
Changed in ltrace (Ubuntu):
assignee: Taco Screen team (taco-screen-team) → Adam Conrad (adconrad)
Revision history for this message
Adam Conrad (adconrad) wrote :

Is the patch attached to https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=744752 sufficient enough to close this? That seems much less intrusive than the 27 thousand line patch suggested above in the Ubuntu bug report. :P

Revision history for this message
bugproxy (bugproxy) wrote :

------- Comment From <email address hidden> 2015-06-25 12:39 EDT-------
The patch mentioned in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=744752 is not sufficient and was not accepted upstream as it is breaking the current code.
so this what I suggest to be compatible with the future.
- take current git tree
- eventually reset to commit 11035a0567c8726370427e741500b469c3b71876
- rename following files to avoid execution:
testsuite/ltrace.minor/attach-process-dlopen.exp
testsuite/ltrace.main/filters.exp
testsuite/ltrace.main/dwarf.exp

This is what I am proposing to include in debian with bug #bug=744752

Steve Langasek (vorlon)
Changed in ltrace (Ubuntu):
assignee: Adam Conrad (adconrad) → Mathieu Trudel-Lapierre (cyphermox)
Changed in ltrace (Ubuntu):
status: Triaged → In Progress
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package ltrace - 0.7.3-5.1ubuntu4

---------------
ltrace (0.7.3-5.1ubuntu4) xenial; urgency=medium

  * debian/patches/LP1547152.diff: removed.
  * Backport more ppc64el fixes to fix tracing on PPC64; backporting the
    required bits and pieces from the rest of ltrace (LP: #1547152, #1398143)
    - add_irelative_tracing_b420a226.patch: add support for IRELATIVE tracing.
    - find_irelative_b061bae3.patch: split the function
      linux_elf_find_irelative_name out of linux_elf_add_plt_entry_irelative
    - keep_plt_reloc_in_vector_673ff510.patch: keep PLT relocs in a vector.
    - add_elf_each_symbol_7a29f9e7.patch: add elf_each_symbol function for
      iteration.
    - add_elf_can_read_next_5c37171a.patch: add the elf_can_read_next method.
    - add_elf_read_next_u_439ab5bf.patch: add methods for doing stream-like
      reads for various types.
    - add_elf_read_u8_3c636fb7.patch: add read for u8.
    - elf_read_uleb128_184779e4.patch: add elf_read_*_uleb128.
    - elf_load_dynamic_entry_4f2f66e6.patch: add function load_dynamic_entry.
    - arm_attr_decoding_df7d2311.patch: implement ARM attribute decoding,
      this can determine when hardfp is used in the process.
    - arm_fetch_backend_97a25160.patch: add fetch backend for float and double
      return values on ARM.
    - arm_backend_fixes_1383e5bd.patch: misc ARM backend fixes.
    - arm_bpc_62fc7747.patch: implement Base Procedure Call Standard.
    - arm_vfp_params_1c8596d4.patch: implement VFP parameter passing for ARM.
    - arm_vararg_without_vfp_88a0fe50.patch: we need to handle varargs in ARM
      without VFP.
    - arm_plt_rel_9e33f5ac.patch: unbreak ARM wrt the previous patch, relplt
      got removed from struct rtelf; so fix this to still work.
    - dont_ltelf_destroy_if_init_fails_0ba3c5ee.patch: don't call
      ltelf_destroy if ltelf_init fails (ie. for ENOENT).
    - ppc64el.diff: backported eea4ad2c to replace the patch that was already
      there, as it includes support for irelative and wchar.
    - jmp_irel.patch: backport 73b85aad: support tracing P_PPC64_JMP_IREL.
    - ppc64le-fixes.patch: more misc backports for ppc64 fixes, patch from
      Fedora packaging git.
      + [35a9677d] fix bugs in fetch backend of powerpc64le
      + [a46c07fc] Fix coding style in PowerPC's arch.h
      + [44789e1e] PowerPC: convert ELFv2 conditionals from preprocessor to
        plain conditions.
    - ppc64-fork.patch: backport 35742523: Fix tracing across fork on PPC64.
    - on_install_breakpoint_56134ff5.patch: ensure we do have the on_install
      breakpoint needed for the unprelink patch.
    - ppc64-unprelink.patch: backport a0093ca4: Don't crash untraced calls via
      PLT in prelinked PPC64 binaries.
    - ppc-bias.patch: backport three commits for bias and unresolved breakports
      in PPC:
      + [bf821009] Fix address biasing in PPC backend
      + [d80c5371] Fix cloning of PPC_PLT_NEED_UNRESOLVE breakpoints
      + [d8f1287b] Nits

 -- Mathieu Trudel-Lapierre <email address hidden> Wed, 06 Apr 2016 18:58:54 -0400

Changed in ltrace (Ubuntu):
status: In Progress → Fix Released
description: updated
description: updated
Changed in ltrace (Ubuntu Wily):
importance: Undecided → Low
Changed in ltrace (Ubuntu Trusty):
assignee: nobody → Mathieu Trudel-Lapierre (cyphermox)
Changed in ltrace (Ubuntu Wily):
assignee: nobody → Mathieu Trudel-Lapierre (cyphermox)
Changed in ltrace (Ubuntu Trusty):
status: New → In Progress
Revision history for this message
Martin Pitt (pitti) wrote :

This is very intrusive, possibly destabilizing other architectures, and wily has most of its life already behind, so I'm setting wontfix for wily.

Changed in ltrace (Ubuntu Wily):
status: New → Won't Fix
Revision history for this message
Martin Pitt (pitti) wrote :

Stalled, see bug 1547152

Changed in ltrace (Ubuntu Trusty):
status: In Progress → Incomplete
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.