From cce0803ef038e0e1c6f10f2bc0d444f9ad2faf84 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Wed, 8 May 2013 14:20:14 -0700 Subject: [PATCH 001/100] Add redirect to github wiki --- index.html | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 00000000000..b70de0f0ec1 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + Codestin Search App + + + + If you haven't been automatically + redirected, + click here. + + + From 6ea53f64dcd0c1d89bcce9df08171ad7d154c585 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sat, 1 Jun 2013 17:16:16 -0700 Subject: [PATCH 002/100] Switch to vanity landing page --- flag.gif | Bin 0 -> 29177 bytes ie.gif | Bin 0 -> 14942 bytes index.html | 67 ++++++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 flag.gif create mode 100644 ie.gif diff --git a/flag.gif b/flag.gif new file mode 100644 index 0000000000000000000000000000000000000000..d94153d8b12de37612e4c20a9507cc2ea6acd619 GIT binary patch literal 29177 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 S^PMN>FP61lKD!j>H2x1SX#_F= literal 0 HcmV?d00001 diff --git a/ie.gif b/ie.gif new file mode 100644 index 0000000000000000000000000000000000000000..236f4340823735da79ca01f69ea6aaa5415f6fe8 GIT binary patch literal 14942 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 - - - Codestin Search App + + + Codestin Search App + - If you haven't been automatically - redirected, - click here. + + + WELCOME TO RR + + WELCOME TO RR + + WELCOME TO RR + + WELCOME TO RR + + WELCOME TO RR + + + +

rr is a lightweight tool for recording and replaying execution + of applications (trees of processes and threads).

+ +

Communication

+ +

Technical discussion of rr happens in the "rr-dev" mailing list. Go to + https://mail.mozilla.org/listinfo/rr-dev + to subscribe.

+

The current build and test status of rr is available + at https://travis-ci.org/mozilla/rr.

+

Some rr folks hang out in #research on irc.mozilla.org.

+ +

Code

+ +

To get the sources

+
+git clone git://github.com/mozilla/rr.git
+  
+ +

The rr project is tracked at https://github.com/mozilla/rr.

+ +

Installation

+ +

Go + to https://github.com/mozilla/rr/wiki/Installation + for instructions on how to set up your machine for rr.

+ +

Documentation

+ +

Peruse https://github.com/mozilla/rr/wiki.

+ +

Last updated Sat Jun 1 16:21

+ +

+ From 80f7e9dfdc5e2e17f61e91235a8c63f7d7eaf9aa Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Mon, 24 Jun 2013 21:40:59 -0700 Subject: [PATCH 003/100] Add quick-start guide --- index.html | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 3a00dd99e24..6c722043fa0 100644 --- a/index.html +++ b/index.html @@ -31,6 +31,26 @@

rr is a lightweight tool for recording and replaying execution of applications (trees of processes and threads).

+

Quick-start guide

+ +

To install prebuilt binaries on Ubuntu >=12.04,

+
+cd /tmp
+wget http://people.mozilla.com/~roc/rr/rr-0.0-prerelease.0-Linux-i686.deb
+sudo dpkg -i rr-0.0-prerelease.0-Linux-i686.deb
+  
+ +

Or on Fedora >=17

+
+cd /tmp
+wget http://people.mozilla.com/~roc/rr/rr-0.0-prerelease.0-Linux-i686.rpm
+sudo rpm -i rr-0.0-prerelease.0-Linux-i686.rpm
+  
+ +

Once rr is installed, + see the usage + instructions to run rr.

+

Communication

Technical discussion of rr happens in the "rr-dev" mailing list. Go to @@ -49,7 +69,7 @@

Code

The rr project is tracked at https://github.com/mozilla/rr.

-

Installation

+

Building from source

Go to https://github.com/mozilla/rr/wiki/Installation From 614fccd3f9016d54878a3d8ccb78f69e04d53133 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Tue, 25 Jun 2013 01:43:48 -0700 Subject: [PATCH 004/100] Update package links --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 6c722043fa0..0c068e8b89e 100644 --- a/index.html +++ b/index.html @@ -36,15 +36,15 @@

Quick-start guide

To install prebuilt binaries on Ubuntu >=12.04,

 cd /tmp
-wget http://people.mozilla.com/~roc/rr/rr-0.0-prerelease.0-Linux-i686.deb
-sudo dpkg -i rr-0.0-prerelease.0-Linux-i686.deb
+wget http://people.mozilla.com/~roc/rr/rr-0.0prerelease.0-Linux-x86_64.deb
+sudo dpkg -i rr-0.0prerelease.0-Linux-x86_64.deb
   

Or on Fedora >=17

 cd /tmp
-wget http://people.mozilla.com/~roc/rr/rr-0.0-prerelease.0-Linux-i686.rpm
-sudo rpm -i rr-0.0-prerelease.0-Linux-i686.rpm
+wget http://people.mozilla.com/~roc/rr/rr-0.0prerelease.0-Linux-x86_64.rpm
+sudo rpm -i rr-0.0prerelease.0-Linux-x86_64.rpm
   

Once rr is installed, From 1a2adf68fd668b9c97475ae56715461e646539e9 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Thu, 27 Jun 2013 17:29:15 -0700 Subject: [PATCH 005/100] Prepare for serving from rr-project.org --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..3e6a6179f2f --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +rr-project.org From fa7e51dba037c7701bb43e67807a28a80ba29c26 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Wed, 10 Jul 2013 21:57:59 -0700 Subject: [PATCH 006/100] Clean up the site and publish 0.0.0. --- index.html | 150 +++++++++++++++++++++++++++++---------------------- mchammer.gif | Bin 0 -> 74176 bytes 2 files changed, 87 insertions(+), 63 deletions(-) create mode 100644 mchammer.gif diff --git a/index.html b/index.html index 0c068e8b89e..ab5be7898da 100644 --- a/index.html +++ b/index.html @@ -1,88 +1,112 @@ + Codestin Search App - - - WELCOME TO RR - - WELCOME TO RR - - WELCOME TO RR - - WELCOME TO RR - - WELCOME TO RR - - + + +
+
+
+
WELCOME TO RR
+
+
+
WELCOME TO RR
+
+
+
WELCOME TO RR
+
+
+
WELCOME TO RR
+
+
+
WELCOME TO RR
+
+
+
+
+

rr is a lightweight tool for recording and replaying execution of applications (trees of processes and threads).

-

Quick-start guide

- -

To install prebuilt binaries on Ubuntu >=12.04,

-
+  
+

Quick-start guide

+

rr can currently only record and replay x86 binaries. This + restriction will be lifted in a future version. rr also requires a + relatively recent chip, Merom or so and later. That, + unfortunately, may be a permanent restriction.

+

To install prebuilt, cross-compiled x86 binaries on your x86_64 + Ubuntu >=12.04 system,

+
 cd /tmp
-wget http://people.mozilla.com/~roc/rr/rr-0.0prerelease.0-Linux-x86_64.deb
-sudo dpkg -i rr-0.0prerelease.0-Linux-x86_64.deb
-  
- -

Or on Fedora >=17

-
+wget http://rr-project.org/releases/rr-0.0.0-Linux-x86_64.deb
+sudo dpkg -i rr-0.0.0-Linux-x86_64.deb
+    
+

And on Fedora >=17

+
 cd /tmp
-wget http://people.mozilla.com/~roc/rr/rr-0.0prerelease.0-Linux-x86_64.rpm
-sudo rpm -i rr-0.0prerelease.0-Linux-x86_64.rpm
-  
- -

Once rr is installed, - see the usage - instructions to run rr.

- -

Communication

- -

Technical discussion of rr happens in the "rr-dev" mailing list. Go to - https://mail.mozilla.org/listinfo/rr-dev - to subscribe.

-

The current build and test status of rr is available - at https://travis-ci.org/mozilla/rr.

-

Some rr folks hang out in #research on irc.mozilla.org.

- -

Code

- -

To get the sources

-
+wget http://rr-project.org/releases/rr-0.0.0-Linux-x86_64.rpm
+sudo rpm -i rr-0.0.0-Linux-x86_64.rpm
+    
+

Once rr is installed, + see https://github.com/mozilla/rr/wiki/Usage + for how to run rr.

+
+ +
+

Code

+

The project is tracked at https://github.com/mozilla/rr.

+

To get the sources

+
 git clone git://github.com/mozilla/rr.git
-  
- -

The rr project is tracked at https://github.com/mozilla/rr.

- -

Building from source

- -

Go - to https://github.com/mozilla/rr/wiki/Installation - for instructions on how to set up your machine for rr.

- -

Documentation

- -

Peruse https://github.com/mozilla/rr/wiki.

- -

Last updated Sat Jun 1 16:21

- -

- +
+

Go + to https://github.com/mozilla/rr/wiki/Installation + for instructions on how to set up your machine.

+ + +
+

Communication

+

Technical discussion happens in the "rr-dev" mailing + list. Go + to https://mail.mozilla.org/listinfo/rr-dev + to subscribe.

+

The current build and test status is available + at https://travis-ci.org/mozilla/rr.

+

Some rr folks hang out in #research on irc.mozilla.org.

+
+ +
+

Documentation

+

Peruse https://github.com/mozilla/rr/wiki.

+
+ +
+

Last updated Wed Jul 10 21:51

+

+
diff --git a/mchammer.gif b/mchammer.gif new file mode 100644 index 0000000000000000000000000000000000000000..5588eb8bfd68cc9d76f64526e9531c2d0578e7ff GIT binary patch literal 74176 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 literal 0 HcmV?d00001 From 177e17b26daa54a0aaed979373c9cce4b5d5e0d6 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Thu, 29 Aug 2013 12:32:09 -0700 Subject: [PATCH 007/100] Add presentation to gh-pages until we have a better solution. --- rr.html | 1243 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1243 insertions(+) create mode 100644 rr.html diff --git a/rr.html b/rr.html new file mode 100644 index 00000000000..a2b14f6d4d2 --- /dev/null +++ b/rr.html @@ -0,0 +1,1243 @@ + + + +Codestin Search App + +

+

How rr works

+
mozilla research
+
+ +
+

Low overhead recording and replay of applications (trees of + processes and threads).

+

Record nondeterministic inputs, replay deterministically.

+
+ + +
+

Why?

+
+ +
+

Offline debugging: record intermittent test failures "at scale" + online, debug the recordings offline at leisure.

+
+ +
+

Deterministic debugging: record nondeterministic failure once, + replay deterministically forever.

+
+ +
+

Omniscient debugging: step backwards in time; issue queries over + program state changes.

+
+ + +
+

Overview

+
+ +
+

rr record prog --args
+ →saves recording to trace/

+

rr replay trace/
+ →debugger socket drives replay

+
+ +
+

Most of an application's execution is deterministic.

+

rr records the nondeterministic parts.

+
+ +
+

Examples of nondeterministic inputs

+
    +
  • clock_gettime(...&now);
  • +
  • read(fd, buf, + 4096);
  • +
  • __asm__("rdtsc")
  • +
  • ioctl(...)
  • +
  • UNIX signals...
  • +
+
+ +
+

Then during replay, emulate system calls and rdtsc + by writing the saved nondeterministic data back to the tracee.

+
+ +
+

Shared-memory multitasking is a nondeterministic "input".

+

... but modern hardware can't record it efficiently. So rr + doesn't record truly parallel executions.

+
+ +
+

Scheduling tasks

+

Can switch tasks at syscalls. Must preempt straight-line code + too; and replay the preemptions deterministically.

+
+ +
+

Hardware performance counters (HPCs)

+

Recent chips count instructions-retired, branches-retired, + ..., and can be programmed to interrupt after a count + of x.

+
+ +
+

Simulate task preemption with HPC interrupts.

+

Idea: program insns-retired counter to interrupt + after k . That k approximates + a time slice.

+
+ +
+

Replaying preemption

+

Record the insn-retired counter value v to the trace file. + During replay, program the interrupt for v. Voilà.

+
+ +
+

UNIX signals are recorded and replayed like task preemptions.

+

Record counter value v and signum. Replay by interrupting + after v and "delivering" signum. +

+ + +
+

System requirements

+
+ +
+

Basic requirements

+
    +
  • x86 userspace (x86-64 kernel OK)
  • +
  • linux with "precise event-based sampling" (PEBS; perf events) + support: >= 3.0
  • +
  • (optional) linux with seccomp-bpf support: >= + 3.5
  • +
+
+ +
+

rr touches low-level details of machine architecture, by + necessity; f.e. kernel syscall ABI.

+

Supporting more ISAs is "just work"; expect x86-64 soon.

+
+ +
+

Precise HPC events identify points in execution.

+

Precise replay of signals and preemption requires interrupting + tracees at these events.

+
+ +
+

Performance counters are messier in reality

+
    +
  • Insns-retired counter is imprecise. Use precise + retired-branch counter instead.
  • +
  • Counter interrupts can overshoot. Subtract a "skid + region".
  • +
  • (So replay point is technically indeterminate. But + doesn't seem to be a problem in practice, yet.)
  • +
+
+ +
+

seccomp-bpf enables rr to selectively trace + syscalls.

+

Trace traps are slow; only trap to rr for syscalls that can't be + handled in the tracee.

+
+ +
+

Buffer syscalls; flush buffer as "super event"

+

TODO DIAGRAM

+
+ +
+

seccomp-bpf support is technically optional...

+

... but rr can record over 100x faster with syscall buffering + enabled.

+
+ +
+

No ASLR or ptrace hardening

+

TODO

+
+ + +
+

Recorder implementation

+
+ +
+

Tasks are controlled through the ptrace API. +

HPCs are controlled through the perf event API.

+
+ +
+

The first traced task is forked from rr. After + that, clone() and fork()from tracees + add new tasks.

+

And tasks die at exit().

+
+ +
+

Simplified recorder loop

+ +
+    while live_task():
+        task t = schedule()
+        if not status_changed(t):
+            resume_execution(t)
+        handle_event(t)
+    
+
src/recorder/recorder.c
+
+ +
+

Scheduling a task

+
+    task schedule():
+        for each task t, round-robin:
+            if is_runnable(t)
+               or status_changed(t):
+                return t
+        tid = waitpid(ANY_CHILD_TASK)
+        return task_map[tid]
+  
+
src/recorder/rec_sched.c
+
+ +
+

Tasks changing status

+
+    bool status_changed(task t):
+        # Non-blocking
+        return waitpid(t.tid, WNOHANG)
+
+    # Deceptively simple: includes
+    # syscalls, signals, ptrace
+    # events ...
+  
+
src/recorder/rec_sched.c
+
+ +
+

Resuming task execution

+

Invariant: At most one task is running userspace code. + All other tasks are either idle or awaiting completion of a + syscall.

+
+ +
+

Multiple running tasks are nondeterministic

+

TODO EXAMPLE RACE, SYSCALL DIVERGENCE

+
+ +
+

Resuming a task, simplified

+
+    void resume_execution(task t):
+        ptrace(PTRACE_SYSCALL, t.tid)
+        waitpid(t.tid)  # Blocking
+
+    # Again, deceptively simple: traps
+    # for syscalls, signals, ptrace
+    # events ...
+  
+
src/recorder/recorder.c
+
+ +
+

Most recorder work is done + for handle_event(task + t).

+

But before looking at it, a few digressions ...

+
+ +
+

Generating time-slice interrupts

+
    +
  • perf_event_open() fd for + retired-conditional-branches; details are microarch + specific
  • +
  • Set event "sample period" to k
  • +
  • Make event fd O_ASYNC and set tracee task as owner
  • +
  • tracee sent SIGIO at rbc ≈ k
  • +
+
+ +
+

Trapping tracees at rdtsc

+
    +
  • prctl(PR_SET_TSC, PR_TSC_SIGSEGV) → tracees + executing rdtsc trap to SIGSEGV
  • +
  • rr examines which instruction triggered SIGSEGV
  • +
  • if rdtsc, value is recorded and insn is emulated
  • +
+
+ +
+

Tracees generate ptrace events by executing fork, clone, exit, + and some other syscalls.

+

ptrace events exist for linux reasons that aren't + interesting.

+
+ +
+

(rr tracees can share memory mappings with other processes.

+

Nondeterministic input that must be recorded, but for now, assume + "don't do that".)

+
+ +
+

Tracee events seen + by handle_event()

+
    +
  • "Pseudo"-signal delivered by implementation of rdtsc or + time-slice interrupts
  • +
  • Other, "real", signals
  • +
  • ptrace events
  • +
  • Syscall entry and exit
  • +
+
+ +
+

handle_event() structure

+

TODO

+
src/recorder/*.c +
+ +
+

Non-nestable events

+

TODO

+
+ +
+

Some syscalls must be executed atomically; can't switch task + until syscall finishes.

+

TODO mmap example

+
+ +
+

On the other hand, some syscalls require switching the + task; syscall can't finish until the task switches.

+

TODO waitpid example

+
+ +
+

Scratch buffers for blocking syscalls

+

TODO

+
+ +
+

POSIX signals 101

+

TODO

+
+ +
+

Linux signals 202

+

TODO

+
+ +
+

Recording signal delivery

+

TODO

+
+ +
+

Finishing signal handlers

+

TODO

+
+ +
+

Delivering unhandled signals

+

TODO

+

This breaks the rr scheduling invariant.

+
+ + + +
+

Syscall buffer

+
+ +
+

ptrace traps are expensive. Do as much work in tracee process as + possible.

+

Use seccomp-bpf to selectively trap syscalls. +

+ +
+

LD_PRELOAD a lib that wraps libc functions.

+

Wrapper functions record kernel return value and outparam data to + the syscall buffer.

+
+ +
+

Upside: works "out of the box"; no recompilation necessary.

+

Downside: Exposes rr to glibc internals. And rr can't wrap + syscalls made by glibc itself.

+
+ +
+

Untraced syscalls are recorded to syscallbuf by tracee. + Traced events recorded by the rr process "flush" the + tracee's syscallbuf.

+

Lib falls back on traced syscalls.

+
+ +
+

Simplified example of wrapper function

+
+int close(int fd)
+{
+   long ret;
+   if (!start_buffer_syscall(SYS_close))
+     /* Fall back on traced syscall. */
+     return syscall(SYS_close, fd);
+   /* Buffer this close() call. */
+   ret = untraced_syscall1(SYS_close, fd);
+   return commit_syscall(SYS_close, ret);
+}
+  
+
+ +
+

How untraced syscalls are made

+
    +
  • Create single "untraced" kernel entry point +
    +asm("_untraced_syscall:\n\t"
    +    "int $0x80");
    +      
  • +
  • Install filter that passes calls + from _untraced_syscall, traps to rr otherwise.
  • +
+
+ +
+

resume_execution changes for PTRACE_SECCOMP events

+

TODO

+
+ +
+

Syscallbuf wrappers of blocking syscalls

+

TODO

+
+ +
+

perf events to the rescue: "descheduled" event

+

TODO

+
+ +
+

Handling "desched notifications"

+

TODO

+
+ + +
+

Saved traces

+
+ +
+

Trace directory contents

+
    +
  • TODO
  • +
  • arg_env
  • +
  • trace
  • +
  • mmaps
  • +
  • raw_data
  • +
  • syscall_input
  • +
+
+ + +
+

Replayer implementation

+
+ +
+

Emulate most syscalls using trace data.

+

Actually execute a small number.

+
+ +
+

Built around PTRACE_SYSEMU

+

TODO show difference from + PTRACE_SYSCALL

+
+ +
+

Main loop overview

+

TODO

+
+ +
+

Replaying time-slice interrupts, in theory

+

TODO

+
+ +
+

Replaying time-slice interrupts, in practice

+
    +
  • TODOCompare register files to + approximate exact execution point
  • +
  • TODOSet a breakpoint on target + $ip to avoid single-stepping
  • +
+
+ +
+

Delivering signals

+

TODO

+
+ +
+

Replaying buffered syscalls

+

TODO

+
+ + +
+

Debugger interface

+
+ +
+

(gdb) set i 10 can cause replay divergence.

+

So you're not allowed to do it.

+
+ +
+

Light wrapper around gdb protocol

+

TODO

+
+ +
+

Replayer core passes through to ptrace requests of tracee

+

TODO

+
+ +
+

SIGTRAP, SIGTRAP, SIGTRAP; breakpoints, int3, stepi

+

TODOdistinguishing causes of + traps

+
+ + +
+

Future work

+
+ +
+

Roadmap for near future

+

TODO

+
    +
  • 0.1
  • +
  • 0.2
  • +
  • 0.3
  • +
  • 1.0
  • +
+
+ +
+

Checkpointing

+

TODO

+
+ +
+

Omniscient debugging

+

TODO

+
+ +
+

Exploratory scheduling; targeted recording

+

TODO

+
+ +
+

Copy traces across machines

+

TODO

+
+ +
+

Record shared memory mappings

+

TODO

+
+ +
+

Record ptrace API

+

TODO

+
+ +
+

Port, port, port

+

TODO

+
    +
  • ARM
  • +
  • GPU drivers (NVIDIA, ATI, ...)
  • +
  • Windows NT kernel
  • +
  • Darwin kernel
  • +
+
+ +
+

Thanks from the rr team!

+ +
+ + + + + + + + + + +
+ + + + + + + + + From 4c018b71a9879eeb202ebab02361a5df776524aa Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Fri, 18 Oct 2013 17:24:02 -0700 Subject: [PATCH 008/100] Release version 0.1pre. --- index.html | 36 ++++++++++++++++++---------- rr.html | 70 +++++++++++++++++++++++++++--------------------------- 2 files changed, 58 insertions(+), 48 deletions(-) diff --git a/index.html b/index.html index ab5be7898da..be5c535483a 100644 --- a/index.html +++ b/index.html @@ -54,25 +54,33 @@

rr is a lightweight tool for recording and replaying execution

Quick-start guide

rr can currently only record and replay x86 binaries. This - restriction will be lifted in a future version. rr also requires a - relatively recent chip, Merom or so and later. That, - unfortunately, may be a permanent restriction.

-

To install prebuilt, cross-compiled x86 binaries on your x86_64 - Ubuntu >=12.04 system,

+ restriction will be lifted in a future version. The "official" + rr system configuration is +
    +
  • Fedora 19 x86 OS (linux 3.11 kernel)
  • +
  • running in a guest VM on top of VMWare 9
  • +
  • on an Intel Ivy Bridge series CPU
  • +
+ No guarantees are made about rr behavior on other + configurations. That said, rr is known to work in other + setups. In the future, more configurations will be officially + supported. +

+

To install prebuilt binaries on your x86 Fedora 19 system,

 cd /tmp
-wget http://rr-project.org/releases/rr-0.0.0-Linux-x86_64.deb
-sudo dpkg -i rr-0.0.0-Linux-x86_64.deb
+wget http://rr-project.org/releases/rr-0.1pre.0-Linux-x86.rpm
+sudo rpm -i rr-0.1pre.0-Linux-x86.rpm
     
-

And on Fedora >=17

+

Or on x86 Ubuntu >=12.04

 cd /tmp
-wget http://rr-project.org/releases/rr-0.0.0-Linux-x86_64.rpm
-sudo rpm -i rr-0.0.0-Linux-x86_64.rpm
+wget http://rr-project.org/releases/rr-0.1pre.0-Linux-x86.deb
+sudo dpkg -i rr-0.1pre.0-Linux-x86.deb
     

Once rr is installed, - see https://github.com/mozilla/rr/wiki/Usage - for how to run rr.

+ visit https://github.com/mozilla/rr/wiki/Usage + to learn how to use rr.

@@ -100,11 +108,13 @@

Communication

Documentation

+

Work-in-progress presentation about the technical details of + rr: http://rr-project.org/rr.html.

Peruse https://github.com/mozilla/rr/wiki.

-

Last updated Wed Jul 10 21:51

+

Last updated Fri Oct 18 17:19

diff --git a/rr.html b/rr.html index a2b14f6d4d2..f1ff88557ca 100644 --- a/rr.html +++ b/rr.html @@ -161,7 +161,7 @@

Performance counters are messier in reality

Buffer syscalls; flush buffer as "super event"

-

TODO DIAGRAM

+

TODO DIAGRAM

@@ -172,7 +172,7 @@

Buffer syscalls; flush buffer as "super event"

No ASLR or ptrace hardening

-

TODO

+

TODO

- TODO: add to or replace with inline video demonstration. + Start by using rr to record your application:

 $ rr record /your/application --args
 ...
-TEST-FAIL: foo
+FAIL: oh no!
       

- The execution of your application, including the fail of the - test, was saved to disk. That recording can now be debugged. + The entire execution, including the failure, was saved to disk. + That recording can now be debugged.

 $ rr replay trace_0
 GNU gdb (GDB) ...
@@ -53,40 +201,40 @@ 

rr records nondeterministic executions of applications, Most of the common gdb commands can be used.
 (gdb) break main
-Breakpoint 1 at 0x8048797: file ..., line 6.
+Breakpoint 1 at 0x8048797: file ...
 (gdb) continue
 Continuing.
 
-Breakpoint 1, main (argc=1, argv=0xffffd694) at ...:6
+Breakpoint 1, main (argc=1, argv=0xffffd694) ...
 ...
       

- If you need to restart the debugging session to see data - from earlier in execution, use gdb's run - command. + If you need to restart the debugging session, for example + because you missed breaking on some critical execution point, no + problem. Just use gdb's run command to restart + replay.

 (gdb) run
 The program being debugged has been started already.
 Start it from the beginning? (y or n) y
 ...
-Breakpoint 1, main (argc=1, argv=0xffffd694) at ...:6
+Breakpoint 1, main (argc=1, argv=0xffffd694) ...
 ...
 (gdb) 
       

The run command started another replay run of your recording from the beginning. But after the session restarted, - the same execution was replayed again. All your - debugging state was preserved across the restart, as well. + the same execution was replayed again. And all your + debugging state was preserved across the restart.

This technology can make your debugging more efficient. Read on to learn more …

+

getting started

-

getting started

-

fedora

@@ -106,20 +254,22 @@ 

ubuntu

+

run rr

- Follow - the usage - instructions to set up your machine (if necessary) and - learn how to use rr. + Follow the + usage instructions to set up your machine (if necessary) + and learn how to use rr. +

-
-

background and motivation

+

background and motivation

+

Everyone who's worked on a nontrivial application (like Firefox) has gone @@ -143,8 +293,7 @@

background and motivation

that they're literally not the worth the time to fix with traditional techniques. However, for big projects like Firefox with its half-billion users, a bug that only reproduces 1 out of - 10,000 test runs can still have a significant negative impact on - users. + 10,000 test runs can still have a negative impact on users.

rr solves these problems by splitting debugging into two phases: first recording, in which the application's execution @@ -162,9 +311,13 @@

background and motivation

The benefit to developers is obvious: an intermittent bug can be recorded by a script over lunchtime, say, and then debugged at leisure in the afternoon. Multiple cores can be used in - parallel to record failures. Even for easily reproducible bugs, - a repeatable, deterministic, debugging session is a powerful - tool on top of traditional debugging. + parallel to record failures. If you accidentally set a + breakpoint in the wrong place and miss gathering critical + information, your precious intermittent failure isn't lost. + Just fix your breakpoint and then tell gdb to run + the recording back from the beginning again. Even for easily + reproducible bugs, a repeatable, deterministic, debugging + session is a powerful tool on top of traditional debugging.

And for projects like Firefox which run literally millions of tests a day on a vast build and test infrastructure, @@ -194,7 +347,7 @@

background and motivation

Firefox, it is very likely to be generally useful. However, there's nothing about rr that's specific to Firefox; we've just spent the majority of our testing time on Firefox. rr - support will broaden as the project matures. + will work well with more programs as the project matures.
  • Prioritize deployability. rr runs on a stock linux kernel, and requires little (Ubuntu) to no (Fedora) system configuration changes. And of course rr works on @@ -209,11 +362,11 @@

    background and motivation

    Firefox test suites, we generally see about a 1.2x slowdown when recording with rr. That means that if the suite takes 10 minutes to run by itself, it will take around 12 minutes to be - recorded running under rr. + recorded by rr.
  • -
    -

    limitations

    +

    limitations

    +

    Some of rr's limitations are inherent, and some will be removed in future releases. @@ -239,8 +392,8 @@

    limitations

    -
    -

    further reference

    +

    further reference

    +

    This presentation provides an overview of the rr implementation and is meant for @@ -254,9 +407,19 @@

    further reference

    + + From 3727afa90f78933d95547674c4f62c73b6d11fd4 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sat, 22 Mar 2014 10:31:03 -0700 Subject: [PATCH 024/100] Push new page live. --- index.html | 481 +++++++++++++++++++++++++++++++++++++++++++--------- index2.html | 425 ---------------------------------------------- 2 files changed, 397 insertions(+), 509 deletions(-) delete mode 100644 index2.html diff --git a/index.html b/index.html index 644719ec954..f6933a47561 100644 --- a/index.html +++ b/index.html @@ -2,111 +2,424 @@ - Codestin Search App + Codestin Search App + + + + - - -
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    -
    -
    - -

    rr is a lightweight tool for recording and replaying execution - of applications (trees of processes and threads).

    + Fork me on GitHub + +
    + + +
    +
    +
    +
    WELCOME TO RR
    +
    +
    +
    WELCOME TO RR
    +
    +
    +
    WELCOME TO RR
    +
    +
    +
    WELCOME TO RR
    +
    +
    +
    WELCOME TO RR
    +
    +
    +
    +
    +
    +
    +

    Last updated Fri Oct 18 17:19

    +

    +
    +
    + +
    +

    rr

    + +
    + +

    rr records nondeterministic executions and debugs them + deterministically.

    +

    rr aspires to be your primary debugging tool, replacing — + well, enhancing — gdb. You record a failure once, then + debug the recording, deterministically, as many times as you want. + Every time the same execution is replayed.

    + +

    the rr debugging experience

    +
    +

    + +

    + Start by using rr to record your application: +

    +$ rr record /your/application --args
    +...
    +FAIL: oh no!
    +      
    +

    + The entire execution, including the failure, was saved to disk. + That recording can now be debugged. +

    +$ rr replay trace_0
    +GNU gdb (GDB) ...
    +...
    +0x4cee2050 in _start () from /lib/ld-linux.so.2
    +(gdb)
    +      
    +

    + Remember, you're debugging the recorded trace + deterministically; not a live, nondeterministic + execution. The replayed execution's address spaces, register + contents, syscall data etc are exactly the same in every run. +

    + Most of the common gdb commands can be used. +

    +(gdb) break main
    +Breakpoint 1 at 0x8048797: file ...
    +(gdb) continue
    +Continuing.
    +
    +Breakpoint 1, main (argc=1, argv=0xffffd694) ...
    +...
    +      
    +

    + If you need to restart the debugging session, for example + because you missed breaking on some critical execution point, no + problem. Just use gdb's run command to restart + replay. +

    +(gdb) run
    +The program being debugged has been started already.
    +Start it from the beginning? (y or n) y
    +...
    +Breakpoint 1, main (argc=1, argv=0xffffd694) ...
    +...
    +(gdb) 
    +      
    +

    + The run command started another replay run of your + recording from the beginning. But after the session restarted, + the same execution was replayed again. And all your + debugging state was preserved across the restart. +

    + This technology can make your debugging more efficient. Read on + to learn more … + +

    + +

    getting started

    -

    Quick-start guide

    -

    rr can currently only record and replay x86 binaries. This - restriction will be lifted in a future version. -

    -

    To install prebuilt binaries on your Fedora system,

    -
    +    
    +

    fedora

    +
     cd /tmp
     wget http://rr-project.org/releases/rr-0.5.1-Linux-$(uname -m).rpm
     sudo rpm -i rr-0.5.1-Linux-$(uname -m).rpm
    -    
    -

    Or on Ubuntu,

    -
    +      
    +
    + +
    +

    ubuntu

    +
     cd /tmp
     wget http://rr-project.org/releases/rr-0.5.1-Linux-$(uname -m).deb
     sudo dpkg -i rr-0.5.1-Linux-$(uname -m).deb
    -    
    -

    Once rr is installed, - visit https://github.com/mozilla/rr/wiki/Usage - to learn how to use rr.

    -
    + + -
    -

    Code

    -

    The project is tracked at https://github.com/mozilla/rr.

    -

    To get the sources

    -
    -git clone git://github.com/mozilla/rr.git
    -    
    -

    Go - to https://github.com/mozilla/rr/wiki/Installation - for instructions on how to set up your machine.

    +
    +

    build from source

    + Follow + these instructions. +
    + +
    +

    run rr

    +

    + Follow the + usage instructions to set up your machine (if necessary) + and learn how to use rr. +

    -
    -

    Communication

    -

    Technical discussion happens in the "rr-dev" mailing - list. Go - to https://mail.mozilla.org/listinfo/rr-dev - to subscribe.

    -

    The current build and test status is available - at https://travis-ci.org/mozilla/rr.

    -

    Some rr folks hang out in #research on irc.mozilla.org.

    +

    background and motivation

    +
    +

    + Everyone who's worked on a nontrivial application + (like Firefox) has gone + through the pain of debugging an intermittently-reproducible + bug. Since nontrivial applications + are nondeterministic, each execution is different, and + you may require 5, 10, or even 100 runs just to see the bug + manifest. +

    + It's hard to debug these bugs with traditional techniques + because single stepping, setting breakpoints, inspecting program + state, etc, is all a waste of time if the program execution + you're debugging ends up not even exhibiting the bug. Even when + you can reproduce the bug consistently, important information + such as the addresses of suspect objects is unpredictable from + run to run. Given that software developers spend a lot of time + finding and fixing bugs, nondeterminism has a major impact on + their work. +

    + And there are intermittent bugs that are so hard to reproduce + that they're literally not the worth the time to fix with + traditional techniques. However, for big projects like Firefox + with its half-billion users, a bug that only reproduces 1 out of + 10,000 test runs can still have a negative impact on users. +

    + rr solves these problems by splitting debugging into two phases: + first recording, in which the application's execution + history is saved; then deterministic debugging of the + saved trace: using gdb to control replay of the trace, as many + times as you want. +

    + The saved execution history captures all nondeterminism in the + program's execution. By replaying that trace in the right way, + rr guarantees each debugging session is entirely deterministic. + The memory layout is always the same, the addresses of objects + don't change, register values are identical, syscalls return the + same data, etc. +

    + The benefit to developers is obvious: an intermittent bug can be + recorded by a script over lunchtime, say, and then debugged at + leisure in the afternoon. Multiple cores can be used in + parallel to record failures. If you accidentally set a + breakpoint in the wrong place and miss gathering critical + information, your precious intermittent failure isn't lost. + Just fix your breakpoint and then tell gdb to run + the recording back from the beginning again. Even for easily + reproducible bugs, a repeatable, deterministic, debugging + session is a powerful tool on top of traditional debugging. +

    + And for projects like Firefox which run literally millions of + tests a day on a vast build and test infrastructure, + intermittent failures in those test runs can be recorded on the + infrastructure itself and then deterministically debugged at + some later time, offline. +

    + Tools like fuzzers and randomized fault injectors become even + more powerful when used with rr. Those tools are very good at + triggering some intermittent failure, but it's often + hard to reproduce that same failure again to debug it. + With rr, the randomized execution can simply be recorded. If + the execution failed, then the saved recording can be used to + deterministically debug the problem. +

    + So rr lowers the cost of fixing intermittent bugs. This allows + a new class of bugs to be fixed with the same amount of + engineering time and money, which in turn produces + higher-quality software for the same cost. +

    + Deterministic debugging is an old idea; many systems have + preceded rr. What makes rr different, in our opinion, are the + design goals: +

      +
    • Initially focus on debugging Firefox. Firefox is + a complex application, so if rr is useful for debugging + Firefox, it is very likely to be generally useful. However, + there's nothing about rr that's specific to Firefox; we've + just spent the majority of our testing time on Firefox. rr + will work well with more programs as the project matures. +
    • Prioritize deployability. rr runs on a stock + linux kernel, and requires little (Ubuntu) to no (Fedora) + system configuration changes. And of course rr works on + stock, relatively modern hardware. +
    • Make run-time overload low. We want rr to replace + gdb in your workflow. That means you need to start getting + results with rr about as quickly as you would if you were + using gdb. +
    +

    + The overhead of rr depends on your application's workload. On + Firefox test suites, we generally see about a 1.2x slowdown when + recording with rr. That means that if the suite takes 10 + minutes to run by itself, it will take around 12 minutes to be + recorded by rr.

    -
    -

    Documentation

    -

    Work-in-progress presentation about the technical details of - rr: http://rr-project.org/rr.html.

    -

    Peruse https://github.com/mozilla/rr/wiki.

    +

    limitations

    +
    +

    + Some of rr's limitations are inherent, and some will be removed + in future releases. +

    rr … +

      +
    • emulates a single-core machine. So, parallel programs incur + the slowdown of running on a single core. This is an inherent + feature of the design. +
    • cannot record processes that share memory with processes + outside the recording tree. This is an inherent feature of the + design. rr automatically disables features such as X shared + memory for recorded processes to avoid this problem. +
    • currently only supports x86 32-bit processes. x86-64 will be + supported in the future, it's just a matter of porting work. +
    • requires a reasonably modern x86 CPU. It depends on certain + performance counter features that are not available in older + CPUs, or in ARM at all currently. +
    • requires knowledge of every system call executed by the + recorded processes. It already supports a wide range of + syscalls — those needed by Firefox — but support + isn't comprehensive, so running rr on your application may + uncover a syscall that needs to be implemented. +
    -
    -

    Last updated Fri Oct 18 17:19

    -

    +

    further reference

    +
    +

    + This presentation + provides an overview of the rr implementation and is meant for + potential rr developers. There are some bonus slides intended + to introduce rr to record/replay researchers. +

    + The rr wiki + contains pages that cover technical topics related to rr. +

    + More information about rr will be posted in the future.

    + +
    +

    + mozilla + © 2014 +

    + + diff --git a/index2.html b/index2.html deleted file mode 100644 index f6933a47561..00000000000 --- a/index2.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - Codestin Search App - - - - - - - - - Fork me on GitHub - -
    - - -
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    WELCOME TO RR
    -
    -
    -
    -
    -
    -
    -

    Last updated Fri Oct 18 17:19

    -

    -
    -
    - -
    -

    rr

    - - -
    - -

    rr records nondeterministic executions and debugs them - deterministically.

    -

    rr aspires to be your primary debugging tool, replacing — - well, enhancing — gdb. You record a failure once, then - debug the recording, deterministically, as many times as you want. - Every time the same execution is replayed.

    - -

    the rr debugging experience

    -
    -

    - -

    - Start by using rr to record your application: -

    -$ rr record /your/application --args
    -...
    -FAIL: oh no!
    -      
    -

    - The entire execution, including the failure, was saved to disk. - That recording can now be debugged. -

    -$ rr replay trace_0
    -GNU gdb (GDB) ...
    -...
    -0x4cee2050 in _start () from /lib/ld-linux.so.2
    -(gdb)
    -      
    -

    - Remember, you're debugging the recorded trace - deterministically; not a live, nondeterministic - execution. The replayed execution's address spaces, register - contents, syscall data etc are exactly the same in every run. -

    - Most of the common gdb commands can be used. -

    -(gdb) break main
    -Breakpoint 1 at 0x8048797: file ...
    -(gdb) continue
    -Continuing.
    -
    -Breakpoint 1, main (argc=1, argv=0xffffd694) ...
    -...
    -      
    -

    - If you need to restart the debugging session, for example - because you missed breaking on some critical execution point, no - problem. Just use gdb's run command to restart - replay. -

    -(gdb) run
    -The program being debugged has been started already.
    -Start it from the beginning? (y or n) y
    -...
    -Breakpoint 1, main (argc=1, argv=0xffffd694) ...
    -...
    -(gdb) 
    -      
    -

    - The run command started another replay run of your - recording from the beginning. But after the session restarted, - the same execution was replayed again. And all your - debugging state was preserved across the restart. -

    - This technology can make your debugging more efficient. Read on - to learn more … - -

    - -

    getting started

    -
    -
    -

    fedora

    -
    -cd /tmp
    -wget http://rr-project.org/releases/rr-0.5.1-Linux-$(uname -m).rpm
    -sudo rpm -i rr-0.5.1-Linux-$(uname -m).rpm
    -      
    -
    - -
    -

    ubuntu

    -
    -cd /tmp
    -wget http://rr-project.org/releases/rr-0.5.1-Linux-$(uname -m).deb
    -sudo dpkg -i rr-0.5.1-Linux-$(uname -m).deb
    -      
    -
    - -
    -

    build from source

    - Follow - these instructions. -
    - -
    -

    run rr

    -

    - Follow the - usage instructions to set up your machine (if necessary) - and learn how to use rr. -

    -
    - -

    background and motivation

    -
    -

    - Everyone who's worked on a nontrivial application - (like Firefox) has gone - through the pain of debugging an intermittently-reproducible - bug. Since nontrivial applications - are nondeterministic, each execution is different, and - you may require 5, 10, or even 100 runs just to see the bug - manifest. -

    - It's hard to debug these bugs with traditional techniques - because single stepping, setting breakpoints, inspecting program - state, etc, is all a waste of time if the program execution - you're debugging ends up not even exhibiting the bug. Even when - you can reproduce the bug consistently, important information - such as the addresses of suspect objects is unpredictable from - run to run. Given that software developers spend a lot of time - finding and fixing bugs, nondeterminism has a major impact on - their work. -

    - And there are intermittent bugs that are so hard to reproduce - that they're literally not the worth the time to fix with - traditional techniques. However, for big projects like Firefox - with its half-billion users, a bug that only reproduces 1 out of - 10,000 test runs can still have a negative impact on users. -

    - rr solves these problems by splitting debugging into two phases: - first recording, in which the application's execution - history is saved; then deterministic debugging of the - saved trace: using gdb to control replay of the trace, as many - times as you want. -

    - The saved execution history captures all nondeterminism in the - program's execution. By replaying that trace in the right way, - rr guarantees each debugging session is entirely deterministic. - The memory layout is always the same, the addresses of objects - don't change, register values are identical, syscalls return the - same data, etc. -

    - The benefit to developers is obvious: an intermittent bug can be - recorded by a script over lunchtime, say, and then debugged at - leisure in the afternoon. Multiple cores can be used in - parallel to record failures. If you accidentally set a - breakpoint in the wrong place and miss gathering critical - information, your precious intermittent failure isn't lost. - Just fix your breakpoint and then tell gdb to run - the recording back from the beginning again. Even for easily - reproducible bugs, a repeatable, deterministic, debugging - session is a powerful tool on top of traditional debugging. -

    - And for projects like Firefox which run literally millions of - tests a day on a vast build and test infrastructure, - intermittent failures in those test runs can be recorded on the - infrastructure itself and then deterministically debugged at - some later time, offline. -

    - Tools like fuzzers and randomized fault injectors become even - more powerful when used with rr. Those tools are very good at - triggering some intermittent failure, but it's often - hard to reproduce that same failure again to debug it. - With rr, the randomized execution can simply be recorded. If - the execution failed, then the saved recording can be used to - deterministically debug the problem. -

    - So rr lowers the cost of fixing intermittent bugs. This allows - a new class of bugs to be fixed with the same amount of - engineering time and money, which in turn produces - higher-quality software for the same cost. -

    - Deterministic debugging is an old idea; many systems have - preceded rr. What makes rr different, in our opinion, are the - design goals: -

      -
    • Initially focus on debugging Firefox. Firefox is - a complex application, so if rr is useful for debugging - Firefox, it is very likely to be generally useful. However, - there's nothing about rr that's specific to Firefox; we've - just spent the majority of our testing time on Firefox. rr - will work well with more programs as the project matures. -
    • Prioritize deployability. rr runs on a stock - linux kernel, and requires little (Ubuntu) to no (Fedora) - system configuration changes. And of course rr works on - stock, relatively modern hardware. -
    • Make run-time overload low. We want rr to replace - gdb in your workflow. That means you need to start getting - results with rr about as quickly as you would if you were - using gdb. -
    -

    - The overhead of rr depends on your application's workload. On - Firefox test suites, we generally see about a 1.2x slowdown when - recording with rr. That means that if the suite takes 10 - minutes to run by itself, it will take around 12 minutes to be - recorded by rr. -

    - -

    limitations

    -
    -

    - Some of rr's limitations are inherent, and some will be removed - in future releases. -

    rr … -

      -
    • emulates a single-core machine. So, parallel programs incur - the slowdown of running on a single core. This is an inherent - feature of the design. -
    • cannot record processes that share memory with processes - outside the recording tree. This is an inherent feature of the - design. rr automatically disables features such as X shared - memory for recorded processes to avoid this problem. -
    • currently only supports x86 32-bit processes. x86-64 will be - supported in the future, it's just a matter of porting work. -
    • requires a reasonably modern x86 CPU. It depends on certain - performance counter features that are not available in older - CPUs, or in ARM at all currently. -
    • requires knowledge of every system call executed by the - recorded processes. It already supports a wide range of - syscalls — those needed by Firefox — but support - isn't comprehensive, so running rr on your application may - uncover a syscall that needs to be implemented. -
    -
    - -

    further reference

    -
    -

    - This presentation - provides an overview of the rr implementation and is meant for - potential rr developers. There are some bonus slides intended - to introduce rr to record/replay researchers. -

    - The rr wiki - contains pages that cover technical topics related to rr. -

    - More information about rr will be posted in the future. -

    - -
    -

    - mozilla - © 2014 -

    - - - - - From 7b5b99f096acba27137bfe65653a48ef80db5be4 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sat, 22 Mar 2014 16:10:52 -0700 Subject: [PATCH 025/100] Justify paragraphs, add link to Firefox helpers, and add Haswell caveat. --- index.html | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index f6933a47561..1a572be34e0 100644 --- a/index.html +++ b/index.html @@ -80,6 +80,12 @@ -webkit-column-width: 30rem; column-width: 30rem; } + .columnar p { + text-align: justify; + } + .columnar ul { + text-align: justify; + } code { font-family: 'Cousine'; @@ -254,7 +260,7 @@

    ubuntu

    -

    build from source

    +

    or build from source

    Follow these instructions.
    @@ -265,6 +271,12 @@

    run rr

    Follow the usage instructions to set up your machine (if necessary) and learn how to use rr. +

    + If you're using rr to debug Firefox, you may find + + these special setup instructions helpful. They cover how + to build a 32-bit Firefox on a 64-bit OS, and how to use rr to + record Firefox test suites.

    @@ -389,6 +401,9 @@

    limitations

    syscalls — those needed by Firefox — but support isn't comprehensive, so running rr on your application may uncover a syscall that needs to be implemented. +
  • does not support machines that have the new Intel + Haswell-based CPUs. This is just an issue of unfortunate + timing, and support will land in the next release if possible.
  • From 16e6eef04b0ac4ee949fc78da4484766672cb205 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sun, 23 Mar 2014 23:54:47 -0700 Subject: [PATCH 026/100] Remove columns, improve text example, embed video. --- index.html | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/index.html b/index.html index 1a572be34e0..3c7f2173cc5 100644 --- a/index.html +++ b/index.html @@ -75,16 +75,10 @@ font-size: 1.5rem; } - .columnar { - -moz-column-width: 30rem; - -webkit-column-width: 30rem; - column-width: 30rem; - } - .columnar p { - text-align: justify; - } - .columnar ul { - text-align: justify; + section { + margin-left: auto; + margin-right: auto; + max-width: 50rem; } code { @@ -170,14 +164,14 @@

    rr

    rr records nondeterministic executions and debugs them - deterministically.

    + deterministically

    rr aspires to be your primary debugging tool, replacing — well, enhancing — gdb. You record a failure once, then debug the recording, deterministically, as many times as you want. Every time the same execution is replayed.

    the rr debugging experience

    -
    +

    @@ -206,12 +200,12 @@

    the rr debugging experience

    Most of the common gdb commands can be used.

    -(gdb) break main
    -Breakpoint 1 at 0x8048797: file ...
    +(gdb) break mozilla::dom::HTMLMediaElement::HTMLMediaElement
    +...
     (gdb) continue
     Continuing.
    -
    -Breakpoint 1, main (argc=1, argv=0xffffd694) ...
    +...
    +Breakpoint 1, mozilla::dom::HTMLMediaElement::HTMLMediaElement (this=0x61362f70, aNodeInfo=...)
     ...
           

    @@ -224,7 +218,7 @@

    the rr debugging experience

    The program being debugged has been started already. Start it from the beginning? (y or n) y ... -Breakpoint 1, main (argc=1, argv=0xffffd694) ... +Breakpoint 1, mozilla::dom::HTMLMediaElement::HTMLMediaElement (this=0x61362f70, aNodeInfo=...) ... (gdb) @@ -233,10 +227,18 @@

    the rr debugging experience

    recording from the beginning. But after the session restarted, the same execution was replayed again. And all your debugging state was preserved across the restart. +

    + Note that the the this pointer of the + dynamically-allocated object was the same in both replay + sessions. Memory allocations are exactly the same in each + replay, meaning you can hard-code addresses you want to watch. +

    + This video demonstrates rr's basic capabilities in a bit more + detail. +

    This technology can make your debugging more efficient. Read on to learn more … -

    getting started

    @@ -281,7 +283,7 @@

    run rr

    background and motivation

    -
    +

    Everyone who's worked on a nontrivial application (like Firefox) has gone @@ -378,7 +380,7 @@

    background and motivation

    limitations

    -
    +

    Some of rr's limitations are inherent, and some will be removed in future releases. @@ -408,7 +410,7 @@

    limitations

    further reference

    -
    +

    This presentation provides an overview of the rr implementation and is meant for From 998b6c43e739de695d46422b3806bcb44a2b1bc2 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Mon, 24 Mar 2014 06:19:42 -0700 Subject: [PATCH 027/100] Release 1.0.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 3c7f2173cc5..135b2c9ebf5 100644 --- a/index.html +++ b/index.html @@ -247,8 +247,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-0.5.1-Linux-$(uname -m).rpm
    -sudo rpm -i rr-0.5.1-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-1.0.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-1.0.0-Linux-$(uname -m).rpm
           
    @@ -256,8 +256,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-0.5.1-Linux-$(uname -m).deb
    -sudo dpkg -i rr-0.5.1-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-1.0.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-1.0.0-Linux-$(uname -m).deb
           
    From 2b54e366f4739f15585e2c3d749b56bea7e2eb89 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Tue, 25 Mar 2014 17:22:40 -0500 Subject: [PATCH 028/100] Be less general about perf on FF test suites. --- index.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 135b2c9ebf5..d23781d948c 100644 --- a/index.html +++ b/index.html @@ -373,10 +373,12 @@

    background and motivation

    The overhead of rr depends on your application's workload. On - Firefox test suites, we generally see about a 1.2x slowdown when - recording with rr. That means that if the suite takes 10 - minutes to run by itself, it will take around 12 minutes to be - recorded by rr. + Firefox test suites, rr's recording performance is quite usable. + We see slowdowns down to ≤ 1.2x. A 1.2x slowdown means that if + the suite takes 10 minutes to run by itself, it will take around + 12 minutes to be recorded by rr. However, different test suites + have different performance characteristics, so they have + different overheads as well.

    limitations

    From ea1a4bddebf0c956c131b91d97fd5ce812b4848d Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Wed, 2 Apr 2014 22:34:45 -0700 Subject: [PATCH 029/100] Release 1.1.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index d23781d948c..3817e50a1fe 100644 --- a/index.html +++ b/index.html @@ -247,8 +247,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.0.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-1.0.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-1.1.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-1.1.0-Linux-$(uname -m).rpm
           
    @@ -256,8 +256,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.0.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-1.0.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-1.1.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-1.1.0-Linux-$(uname -m).deb
           
    From a3ae3b32be51a8873774ef0ce93e8c02fd506fa3 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Tue, 15 Apr 2014 04:05:57 -0700 Subject: [PATCH 030/100] Update video demo. --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 3817e50a1fe..38fc8745836 100644 --- a/index.html +++ b/index.html @@ -235,7 +235,7 @@

    the rr debugging experience

    This video demonstrates rr's basic capabilities in a bit more detail. - +

    This technology can make your debugging more efficient. Read on to learn more … From 749365a8c2e480e08fa3b45a0b10ba409c6e5c92 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Tue, 15 Apr 2014 13:49:42 -0700 Subject: [PATCH 031/100] Release 1.2.1. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 38fc8745836..60ce4a89fcd 100644 --- a/index.html +++ b/index.html @@ -247,8 +247,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.1.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-1.1.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-1.2.1-Linux-$(uname -m).rpm
    +sudo rpm -i rr-1.2.1-Linux-$(uname -m).rpm
           
    @@ -256,8 +256,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.1.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-1.1.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-1.2.1-Linux-$(uname -m).deb
    +sudo dpkg -i rr-1.2.1-Linux-$(uname -m).deb
           
    From c433262a97efee91bc19309af2abc55462202e79 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 16 Apr 2014 10:40:52 +1200 Subject: [PATCH 032/100] Update Haswell comment --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 60ce4a89fcd..b404848b278 100644 --- a/index.html +++ b/index.html @@ -405,9 +405,9 @@

    limitations

    syscalls — those needed by Firefox — but support isn't comprehensive, so running rr on your application may uncover a syscall that needs to be implemented. -
  • does not support machines that have the new Intel - Haswell-based CPUs. This is just an issue of unfortunate - timing, and support will land in the next release if possible. +
  • does not work on some systems using Intel Haswell CPUs (but does work + on many other Haswell systems). This is being investigated; follow + the github issue.
  • From 626d982716410ca33b4c348f5a8564a53d70c3c3 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Tue, 22 Apr 2014 22:29:49 -0700 Subject: [PATCH 033/100] Remove command-line arg in example that's not unnecessary. --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index b404848b278..ac6c41ce360 100644 --- a/index.html +++ b/index.html @@ -186,7 +186,7 @@

    the rr debugging experience

    The entire execution, including the failure, was saved to disk. That recording can now be debugged.
    -$ rr replay trace_0
    +$ rr replay
     GNU gdb (GDB) ...
     ...
     0x4cee2050 in _start () from /lib/ld-linux.so.2
    
    From 8270f747bbcced7923e62c23408536aaf6163fb5 Mon Sep 17 00:00:00 2001
    From: Chris Jones 
    Date: Wed, 23 Apr 2014 15:16:20 -0700
    Subject: [PATCH 034/100] Update rr.html slide deck from master.
    
    ---
     res/syscall-buffer.svg |   1 +
     rr.html                | 602 +++++++++++++++++++++++------------------
     2 files changed, 338 insertions(+), 265 deletions(-)
     create mode 100644 res/syscall-buffer.svg
    
    diff --git a/res/syscall-buffer.svg b/res/syscall-buffer.svg
    new file mode 100644
    index 00000000000..c8e8ec5e386
    --- /dev/null
    +++ b/res/syscall-buffer.svg
    @@ -0,0 +1 @@
    +ptrace traps vs. syscall bufferingptrace trapssyscallsyscallrrtraprrtraprrtraprrtraprrtrapsyscall bufferingsyscallsyscallsyscallsyscallsyscallbufferflushrrbufferbufferbuffersyscallsyscallsyscall
    \ No newline at end of file
    diff --git a/rr.html b/rr.html
    index bc4a881b4e6..97c82160d33 100644
    --- a/rr.html
    +++ b/rr.html
    @@ -4,14 +4,16 @@
     Codestin Search App
     
     
    -

    How rr works

    -
    mozilla research
    +

    How rr works

    +
    -

    Low overhead recording and replay of applications (trees of - processes and threads).

    -

    Record nondeterministic inputs, replay deterministically.

    +

    rr records nondeterministic executions and debugs them + deterministically. +

    Practical tool; version 1.2 is latest release. Used to debug + Firefox.

    @@ -373,43 +399,47 @@

    Syscall buffer

    -

    ptrace traps are expensive. Do as much work in tracee process as - possible.

    +

    ptrace traps are expensive. Better to do as much work in tracee + process as possible.

    Use seccomp-bpf to selectively trap syscalls.

    -

    Syscall hooks are LD_PRELOAD'd into tracees.

    -

    Hooks record kernel return value and outparam data to - the syscall buffer.

    +

    Syscall hooks are LD_PRELOAD'd into tracees. +

    Hook functions record kernel return value and outparam data to + the syscall buffer.

    rr monkeypatches __kernel_vsyscall() in vdso to jump - to rr trampoline.

    + to rr trampoline.

    Trampoline calls dispatcher, which calls rr hook if - available.

    + available.

    Untraced syscalls are recorded to syscallbuf by tracee. Traced events recorded by the rr process "flush" the - tracee's syscallbuf.

    -

    Lib falls back on traced syscalls.

    + tracee's syscallbuf. +

    Lib falls back on traced syscalls.

    -

    Simplified example of wrapper function

    -
    +  

    Simplified example of syscallbuf hook function

    +
     static int sys_close(int fd)
     {
    -   long ret;
    -   if (!start_buffer_syscall(SYS_close))
    -     /* Fall back on traced syscall. */
    -     return syscall(SYS_close, fd);
    -   /* Buffer this close() call. */
    -   ret = untraced_syscall1(SYS_close, fd);
    -   return commit_syscall(SYS_close, ret);
    +	long ret;
    +	if (!start_buffer_syscall(SYS_close))
    +		/* Fall back on traced syscall.
    +                 * This generates a ptrace trap. */
    +		return syscall(SYS_close, fd);
    +
    +	/* Untraced syscall. Does not generate
    +         * ptrace trap.*/
    +	ret = untraced_syscall1(SYS_close, fd);
    +        /* Save the result to syscall buffer. */
    +	return commit_syscall(SYS_close, ret);
     }
       
    @@ -421,30 +451,44 @@

    How untraced syscalls are made

     asm("_untraced_syscall:\n\t"
         "int $0x80");
    -      
    -
  • Install filter that passes calls - from _untraced_syscall, traps to rr otherwise.
  • + +
  • Install seccomp-bpf filter that passes calls + from _untraced_syscall, traps to rr otherwise.
  • -

    resume_execution changes for PTRACE_SECCOMP events

    -

    TODO

    +

    seccomp-bpf traps generate PTRACE_EVENT_SECCOMP in + tracer process. +

    rr can then PTRACE_SYSCALL the tracee into traced + syscall.

    -

    Syscallbuf hooks of may-block syscalls

    -

    TODO

    +

    Problem: buffered syscalls don't trap to rr, by design. + But may-block syscalls (f.e. waitpid()) require rr to + schedule another task.

    perf events to the rescue: "descheduled" event

    -

    TODO

    +

    Set event to fire on tracee context switch. Event traps to rr. +

    Buffered syscall blocks → context switch → rr + trap

    -

    Handling "desched notifications"

    -

    TODO

    +

    Generating desched events

    +
      +
    • In tracee, perf_event_open() fd for + context-switch counter +
    • Set event "sample period" to 1 (i.e. next context + switch) just before buffered syscall +
    • Disarm event just after buffered syscall. +
    • tracee sent SIGSYS if context switched during + buffered syscall +
    +
    src/preload/preload.c
    -

    Debugger interface

    +

    Async signals were raised externally at some execution point + during recording. +

    Replay to that execution point just as for time-slice + interrupts.

    -

    (gdb) set i 10 can cause replay divergence.

    -

    So you're not allowed to do it.

    +

    Replay signal delivery by emulating

    +

    If there was a sighandler, restore recorded sigframe + and registers at sighandler entry. +

    Otherwise, nothing else to do.

    -
    -

    Light wrapper around gdb protocol

    -

    TODO

    +

    Replaying buffered syscalls

    +

    Read saved buffer from trace. +

    Replay each syscall as normal, but restore outparam data from + records in the read buffer.

    +
    -

    Replayer core passes through to ptrace requests of tracee

    -

    TODO

    +

    Debugger interface

    -

    SIGTRAP, SIGTRAP, SIGTRAP; breakpoints, int3, stepi

    -

    TODOdistinguishing causes of - traps

    +

    Common commands supported. +

    c, s, si, b, bt, watch, info regs, thr, info thr ...

    -
    -

    Future work

    +

    (gdb) call foo() can cause replay divergence. +

    So you're not allowed to do it … for now. Support coming.

    -

    Roadmap for near future

    -

    TODO

    -
      -
    • 0.1
    • -
    • 0.2
    • -
    • 0.3
    • -
    • 1.0
    • -
    +

    Small stub translates from and to gdb remote protocol. +

    Then passes debugger requests up to rr replayer. +

    src/debugger_gdb.cc
    -

    Checkpointing

    -

    TODO

    +

    Replayer fulfills requests using ptrace() or cached + data. +

    And resumes tracee execution when asked. +

    src/replayer.cc
    -

    Omniscient debugging

    -

    TODO

    +

    Breakpoints, int $3, stepi, watchpoints + all raise SIGTRAP. +

    $ip, breakpoint table, gdb request, + and $DR6 decode trap. +

    src/replayer.cc
    +
    -

    Exploratory scheduling; targeted recording

    -

    TODO

    +

    Future work

    -

    Copy traces across machines

    -

    TODO

    +

    Checkpointing

    +

    Make a "deep fork" of tracee tree during replay. +

    Run code (or whatever) in copied tree, return to original.

    -

    Record shared-memory multithreading

    -

    TODO

    +

    Omniscient + debugging (aka chroniclerr)

    +

    Use chronicle-style + instrumentation to generate execution DB. +

    Query state changes in DB.

    -

    Record ptrace API

    -

    TODO

    +

    CHESS-style + execution search; targeted recording

    +

    At each scheduling decision, make a checkpoint. +

    If execution reaches bad state, done. Else, resume checkpoint.

    -

    Port, port, port

    -

    TODO

    +

    Other projects

      -
    • GPU drivers (NVIDIA, ATI, ...)
    • -
    • Windows NT kernel
    • -
    • Darwin kernel
    • -
    • ARM port not possible with current tech
    • +
    • Copy traces across machines +
    • Integrate hardware shared-memory multithreading recorder + like QuickRec +
    • Record ptrace API; rr record rr record… +
    • Handle GPU drivers (NVIDIA, ATI, ...) +
    • Port to Darwin kernel +
    • Port to Windows NT kernel +
    • ARM port not possible with current generation of chips

    Thanks from the rr team!

    -

    rr for RnR people

    +

    Appendix: rr for RnR people

    -

    Release 0.4 available today at

    -

    rr-project.org

    +

    Release 1.2 available today at +

    rr-project.org

    Use cases

    • Run on modern, commodity hardware and software: yum - install rr; rr record
    • -
    • Aspire to general tool, focus on Firefox initially
    • + install rr; rr record… +
    • Aspire to general tool, focus on Firefox initially
    • Record nondeterministic test failures at scale (e.g., Firefox - build/test infra), debug offline
    • -
    • "Super-debugger" for local development
    • -
    • Search execution space to actively find bugs
    • + build/test infra), debug offline +
    • "Super-debugger" for local development +
    • Search execution space to actively find bugs
    @@ -637,40 +709,40 @@

    Use cases

    Design concerns

    • Commodity HW → only record single HW thread (for - now!)
    • + now!)
    • Commodity SW → stick to higher-level userspace APIs - (e.g., ptrace, PEBS)
    • + (e.g., ptrace, PEBS)
    • Record tests at scale → record perf must be "economical", - but not mission-critical
    • + but not mission-critical
    • "Super-debugger" → the usual, plus queries over execution - history; pretty fast replay
    • + history; pretty fast replay
    • Search exe space → flexible scheduling and - checkpointing
    • + checkpointing

    rr recorder overview

      -
    • Record "applications" consisting of linux tasks
    • +
    • Record "applications" consisting of linux tasks
    • Schedule CPU slices by programming precise counter interrupt - (retired branches, RBC) for k
    • + (retired branches, RBC) for k
    • Time slice is special case of signal: time-slice recorded as - (0, rec-RBC), signals (signum, rec-RBC)
    • -
    • Record kernel-created signal stack
    • + (0, rec-RBC), signals (signum, rec-RBC) +
    • Record kernel-created signal stack
    • Syscall "outparams" and rdtsc generate trace - traps; results saved to log
    • -
    • Plus a "faster" mode we'll cover later
    • + traps; results saved to log +
    • Plus a "faster" mode we'll cover later

    Trade-off: scheduling from userspace

      -
    • While it's great to fully control scheduling ...
    • -
    • ... we have to approximate timeslices; can be unfair
    • +
    • While it's great to fully control scheduling ... +
    • ... we have to approximate timeslices; can be unfair
    • ... interactive programs don't "feel" native; rr has its own - heuristics
    • -
    • ... can be slower
    • -
    • Future work is to have the option of both
    • + heuristics +
    • ... can be slower +
    • Future work is to have the option of both
    @@ -678,14 +750,14 @@

    Trade-off: scheduling from userspace

    Headache: kernel writes racing with userspace

    • rr doesn't (can't efficiently) record reads/writes of memory - shared outside of tracee application.
    • -
    • But there are still hazards with the kernel:
    • + shared outside of tracee application. +
    • But there are still hazards with the kernel:
    • ... kernel-write/task-read hazard on syscall outparam buffers → rr replaces user buffers with scratch and serializes - writes
    • + writes
    • ... kernel-write/task-read on random futexes, e.g. CLONE_CHILD_CLEARTID → no good solution yet; - usleep…
    • + usleep…
    @@ -693,77 +765,77 @@

    Headache: kernel writes racing with userspace

    rr replayer overview

    • Replay signal/time-slice (signum, rec-RBC) by - programming interrupt for rec-RBC
    • -
    • Emulate signals by restoring signal stack and regs
    • -
    • Emulate syscalls by restoring outparams where possible
    • -
    • Execute non-emulatable clone/mmap/et al. as required
    • -
    • Serve debugger requests (maybe covered later)
    • + programming interrupt for rec-RBC +
    • Emulate signals by restoring signal stack and regs +
    • Emulate syscalls by restoring outparams where possible +
    • Execute non-emulatable clone/mmap/et al. as required +
    • Serve debugger requests (maybe covered later)

    Replayer headache: slack in counter interrupts

    • Interrupt programmed for RBC = k may actually fire at - up to RBC = k + slack
    • -
    • (Slack empirically seen to be >= 70 branches)
    • + up to RBC = k + slack +
    • (Slack empirically seen to be >= 70 branches)
    • So we program interrupt for RBC = k - slack and then - advance by breakpoint+stepi
    • + advance by breakpoint+stepi
    • "At target" when rec-RBC == rep-RBC and [rec-regs] - == [rep-regs]
    • -
    • Replay target therefore technically indeterminate
    • + == [rep-regs] +
    • Replay target therefore technically indeterminate

    Recorder "fast mode": syscall buffering

      -
    • ptrace traps are slow
    • +
    • ptrace traps are slow
    • Idea: avoid them when possible by buffering log data - in tracee task
    • + in tracee task
    • Implementation: LD_PRELOAD a helper library with hooks for - common syscalls (read, write, gettimeofday, etc.)
    • + common syscalls (read, write, gettimeofday, etc.)
    • Hook makes fast untraced syscall, saves outparams in - task-local buffer
    • -
    • Flush buffer at traced event (including buffer overflow)
    • + task-local buffer +
    • Flush buffer at traced event (including buffer overflow)

    Headache: many syscalls made internally in glibc

    • Those syscalls can't be wrapped by usual approach of - interposing exported symbol using LD_PRELOAD
    • + interposing exported symbol using LD_PRELOAD
    • Solution: monkeypatch __kernel_vsyscall() in - vdso.
    • + vdso.
    • Syscalls directly made through int $0x80 still - can't be buffered.
    • -
    • We hope this terrible hack evolves into kernel support.
    • + can't be buffered. +
    • We hope this terrible hack evolves into kernel support.

    Headache: buffering syscalls that may block

      -
    • read/write/… may block if buffer empty/full/…
    • +
    • read/write/… may block if buffer empty/full/…
    • But, untraced syscall from wrapper means no trap to - rr for scheduling arbitration
    • -
    • If another tracee is blocked too, then may deadlock
    • + rr for scheduling arbitration +
    • If another tracee is blocked too, then may deadlock
    • Solution: libc wrapper programs perf_event interrupt triggered - by next context-switch of task
    • + by next context-switch of task
    • If the syscall blocks, task is switched out, and rr tracer - gets interrupt (SIGIO from perf_event)
    • + gets interrupt (SIGIO from perf_event)

    Fun debugging tricks

      -
    • Save register / RBC info at all events, verify in replay
    • +
    • Save register / RBC info at all events, verify in replay
    • Generate memory checksums at selected events, verify in - replay
    • + replay
    • LLVM pass to add "execution path logging" (Bell-Larus): poor man's log of retired branches. Save to "magic fd" in recording, - verify in replay.
    • + verify in replay.
    • Hack replayer itself to efficiently log arbitrary info at - arbitrary points
    • + arbitrary points
    From 8fef2342e1650af1cd5f372e7e7df45c33c8cc3b Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Mon, 28 Apr 2014 15:45:52 -0700 Subject: [PATCH 035/100] Release 1.3.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index ac6c41ce360..3133b17a19b 100644 --- a/index.html +++ b/index.html @@ -247,8 +247,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.2.1-Linux-$(uname -m).rpm
    -sudo rpm -i rr-1.2.1-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-1.3.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-1.3.0-Linux-$(uname -m).rpm
           
    @@ -256,8 +256,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.2.1-Linux-$(uname -m).deb
    -sudo dpkg -i rr-1.2.1-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-1.3.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-1.3.0-Linux-$(uname -m).deb
           
    From 3471cf420ed63c4ceae276cfb5f1b9c88f28afc1 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Mon, 16 Jun 2014 20:37:01 +1200 Subject: [PATCH 036/100] Release 1.4.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 3133b17a19b..c2c1289841a 100644 --- a/index.html +++ b/index.html @@ -247,8 +247,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.3.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-1.3.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-1.4.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-1.4.0-Linux-$(uname -m).rpm
           
    @@ -256,8 +256,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.3.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-1.3.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-1.4.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-1.4.0-Linux-$(uname -m).deb
           
    From 8267b9da2c90ee641426eeffd9b00eafe13f7027 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Mon, 16 Jun 2014 20:38:28 +1200 Subject: [PATCH 037/100] Remove Haswell warning, now that the known issues are fixed. --- index.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/index.html b/index.html index c2c1289841a..d2babb37314 100644 --- a/index.html +++ b/index.html @@ -405,9 +405,6 @@

    limitations

    syscalls — those needed by Firefox — but support isn't comprehensive, so running rr on your application may uncover a syscall that needs to be implemented. -
  • does not work on some systems using Intel Haswell CPUs (but does work - on many other Haswell systems). This is being investigated; follow - the github issue.
  • From ee1478f30a094a5a0d16728e352d4080897f03c5 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 24 Jun 2014 17:24:26 +1200 Subject: [PATCH 038/100] Release 1.5.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index d2babb37314..a30ea5cde60 100644 --- a/index.html +++ b/index.html @@ -247,8 +247,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.4.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-1.4.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-1.5.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-1.5.0-Linux-$(uname -m).rpm
           
    @@ -256,8 +256,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.4.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-1.4.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-1.5.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-1.5.0-Linux-$(uname -m).deb
           
    From fd7994c870ba3c8f7857bc37e5a06470369af23b Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Fri, 5 Sep 2014 00:48:05 +1200 Subject: [PATCH 039/100] Trivial edits. --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index a30ea5cde60..acc52b633ea 100644 --- a/index.html +++ b/index.html @@ -363,7 +363,7 @@

    background and motivation

    just spent the majority of our testing time on Firefox. rr will work well with more programs as the project matures.
  • Prioritize deployability. rr runs on a stock - linux kernel, and requires little (Ubuntu) to no (Fedora) + linux kernel, and requires no system configuration changes. And of course rr works on stock, relatively modern hardware.
  • Make run-time overload low. We want rr to replace @@ -395,8 +395,8 @@

    limitations

    outside the recording tree. This is an inherent feature of the design. rr automatically disables features such as X shared memory for recorded processes to avoid this problem. -
  • currently only supports x86 32-bit processes. x86-64 will be - supported in the future, it's just a matter of porting work. +
  • currently only supports x86 32-bit processes. x86-64 support + is being worked on.
  • requires a reasonably modern x86 CPU. It depends on certain performance counter features that are not available in older CPUs, or in ARM at all currently. From 29da480475eb5955ab753b68299fe65e5d9a0434 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Fri, 5 Sep 2014 14:58:53 +1200 Subject: [PATCH 040/100] Add "quick demo" video. --- index.html | 53 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/index.html b/index.html index acc52b633ea..3f7ac08855e 100644 --- a/index.html +++ b/index.html @@ -15,29 +15,39 @@ font-size: 12pt; } body { - padding-left: 10%; - padding-right: 10%; font-family: 'Open Sans', sans; background: linear-gradient(#d1cec4, white); color: #484848; } + body > * { + max-width: 50rem; + margin-left: auto; + margin-right: auto; + } #toprow { - width: 100%; - display: -moz-box; - -moz-box-orient: horizontal; - -moz-box-pack: center; - -moz-box-align: center; - display: -webkit-box; - -webkit-box-orient: horizontal; - -webkit-box-pack: center; - -webkit-box-align: center; - padding: 0; - margin: 0; border: 1px solid gray; border-radius: 10px; } + #toprow > h1 { + padding: 0 20px; + } + + #video-container { + max-width: none; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + margin: 0; + } + + #video-container > p { + width: 560px; + margin: 1em; + } + a { text-decoration: none; color: #0096DD; @@ -75,12 +85,6 @@ font-size: 1.5rem; } - section { - margin-left: auto; - margin-right: auto; - max-width: 50rem; - } - code { font-family: 'Cousine'; } @@ -232,13 +236,16 @@

    the rr debugging experience

    dynamically-allocated object was the same in both replay sessions. Memory allocations are exactly the same in each replay, meaning you can hard-code addresses you want to watch. + + +
    +

    + This video shows a quick demo of rr recording and replaying Firefox. +

    This video demonstrates rr's basic capabilities in a bit more detail. - -

    - This technology can make your debugging more efficient. Read on - to learn more … +

    getting started

    From 862b9344e85ada96bb6478f301ab9ac1228ea92e Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Fri, 5 Sep 2014 16:29:37 +1200 Subject: [PATCH 041/100] Add news link. --- index.html | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index 3f7ac08855e..ec1b743d0c4 100644 --- a/index.html +++ b/index.html @@ -28,6 +28,8 @@ #toprow { border: 1px solid gray; border-radius: 10px; + display: flex; + flex-direction: row; } #toprow > h1 { @@ -54,20 +56,23 @@ } h1 { - display:inline; + display: inline; font-weight: 300; font-size: 5rem; + margin: 0; } #topmenu { - display: inline-block; list-style-type: none; font-size: 1.2rem; + line-height: 2; + padding: 0; } #topmenu li { display: inline; font-weight: 300; padding: 1.5rem; + white-space: nowrap; } #topmenu li a { text-decoration: none; @@ -159,11 +164,12 @@

    rr

    From 4db98db87f233c4f89d61a5651e9e5e19f8cb7af Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 9 Sep 2014 00:37:02 +1200 Subject: [PATCH 042/100] Release 2.0.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index ec1b743d0c4..016431cc92c 100644 --- a/index.html +++ b/index.html @@ -260,8 +260,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.5.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-1.5.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-2.0.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-2.0.0-Linux-$(uname -m).rpm
           
    @@ -269,8 +269,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-1.5.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-1.5.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-2.0.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-2.0.0-Linux-$(uname -m).deb
           
    From 7a8b6397edf58f3bfd3acbdbb2d1493d0336bdcc Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Fri, 12 Sep 2014 12:26:53 +1200 Subject: [PATCH 043/100] Fix installation wiki link. --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 016431cc92c..bb22e954630 100644 --- a/index.html +++ b/index.html @@ -276,7 +276,7 @@

    ubuntu

    or build from source

    - Follow + Follow these instructions.
    From 15f425324b9bf035f8045ea182f064a68f8019db Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 11 Dec 2014 03:59:54 -0800 Subject: [PATCH 044/100] Release 3.0.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index bb22e954630..8fa7914fbda 100644 --- a/index.html +++ b/index.html @@ -260,8 +260,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-2.0.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-2.0.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-3.0.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-3.0.0-Linux-$(uname -m).rpm
           
    @@ -269,8 +269,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-2.0.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-2.0.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-3.0.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-3.0.0-Linux-$(uname -m).deb
           
    From 804bdbaf014e02ea7305c3ceb442133a8a7d1c03 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 1 Jan 2015 11:05:13 +1300 Subject: [PATCH 045/100] Update Web site to reflect 64-bit support --- index.html | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/index.html b/index.html index 8fa7914fbda..2af8f293fbb 100644 --- a/index.html +++ b/index.html @@ -289,8 +289,7 @@

    run rr

    If you're using rr to debug Firefox, you may find - these special setup instructions helpful. They cover how - to build a 32-bit Firefox on a 64-bit OS, and how to use rr to + these setup instructions helpful. They cover how to use rr to record Firefox test suites. @@ -408,8 +407,6 @@

    limitations

    outside the recording tree. This is an inherent feature of the design. rr automatically disables features such as X shared memory for recorded processes to avoid this problem. -
  • currently only supports x86 32-bit processes. x86-64 support - is being worked on.
  • requires a reasonably modern x86 CPU. It depends on certain performance counter features that are not available in older CPUs, or in ARM at all currently. From e8c7906c1976c93f8e7bb8f7f616535a38c46a52 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 22 Apr 2015 06:01:06 -0700 Subject: [PATCH 046/100] Release 3.1.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 2af8f293fbb..4f6c61fdb45 100644 --- a/index.html +++ b/index.html @@ -260,8 +260,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-3.0.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-3.0.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-3.1.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-3.1.0-Linux-$(uname -m).rpm
           
    @@ -269,8 +269,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-3.0.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-3.0.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-3.1.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-3.1.0-Linux-$(uname -m).deb
           
    From 6b34cd8ee3de026602d08b6f40eec7979c50c78a Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 29 Apr 2015 01:33:15 -0700 Subject: [PATCH 047/100] Release 3.2.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 4f6c61fdb45..c8206b476e4 100644 --- a/index.html +++ b/index.html @@ -260,8 +260,8 @@

    getting started

    fedora

     cd /tmp
    -wget http://rr-project.org/releases/rr-3.1.0-Linux-$(uname -m).rpm
    -sudo rpm -i rr-3.1.0-Linux-$(uname -m).rpm
    +wget http://rr-project.org/releases/rr-3.2.0-Linux-$(uname -m).rpm
    +sudo rpm -i rr-3.2.0-Linux-$(uname -m).rpm
           
    @@ -269,8 +269,8 @@

    fedora

    ubuntu

     cd /tmp
    -wget http://rr-project.org/releases/rr-3.1.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-3.1.0-Linux-$(uname -m).deb
    +wget http://rr-project.org/releases/rr-3.2.0-Linux-$(uname -m).deb
    +sudo dpkg -i rr-3.2.0-Linux-$(uname -m).deb
           
    From aa8ef7ade8ef36599c1fb4917ca1dae7daa701cd Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 21 May 2015 14:14:50 +1200 Subject: [PATCH 048/100] Make URLs use https instead of http --- index.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index c8206b476e4..d4f2f229713 100644 --- a/index.html +++ b/index.html @@ -4,9 +4,9 @@ Codestin Search App - - - + From 436f6c7ed6ca0a718cfb3805412af09c97110ee4 Mon Sep 17 00:00:00 2001 From: "Paolo G. Giarrusso" Date: Wed, 6 Jan 2016 17:38:28 +0100 Subject: [PATCH 064/100] Improve contrast by dropping background Drop linear-gradient global background. It reduces a lot contrast of text with the background at the beginning, and makes the style of titles inconsistent across the document. --- index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/index.html b/index.html index b25ee43a89e..6bfdec82d3d 100644 --- a/index.html +++ b/index.html @@ -15,7 +15,6 @@ } body { font-family: 'Open Sans', sans; - background: linear-gradient(#d1cec4, white); color: #484848; } body > * { From e07825b7ec4f707a6cf78e8ca24ddfb3de4f5751 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 3 Feb 2016 23:05:57 +1100 Subject: [PATCH 065/100] Release 4.1.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 6bfdec82d3d..13080388cec 100644 --- a/index.html +++ b/index.html @@ -277,15 +277,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.0.3/rr-4.0.3-Linux-$(uname -m).rpm
    -sudo dnf install rr-4.0.3-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/4.1.0/rr-4.1.0-Linux-$(uname -m).rpm +sudo dnf install rr-4.1.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.0.3/rr-4.0.3-Linux-$(uname -m).deb
    -sudo dpkg -i rr-4.0.3-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/4.1.0/rr-4.1.0-Linux-$(uname -m).deb +sudo dpkg -i rr-4.1.0-Linux-$(uname -m).deb
    From a4cb1d450a17e81c7e6c794e1631c3fabaa42642 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 18 Feb 2016 09:29:56 +1300 Subject: [PATCH 066/100] Change IRC channel to #rr --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 13080388cec..e0ec187124c 100644 --- a/index.html +++ b/index.html @@ -160,7 +160,7 @@

    rr

  • mailing list
  • news
  • -
  • #research on irc.mozilla.org
  • +
  • #rr on irc.mozilla.org
  • @@ -431,7 +431,7 @@

    further reference

    contains pages that cover technical topics related to rr.

    Ask on the mailing - list or on #research on irc.mozilla.org if you have questions about rr. + list or on #rr on irc.mozilla.org if you have questions about rr.

    From a381b5d1b8b2e7c8fe3c9d93d5df9fe715d4d34e Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 17 Mar 2016 18:16:47 +1300 Subject: [PATCH 067/100] Release 4.2.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index e0ec187124c..a506e76faf8 100644 --- a/index.html +++ b/index.html @@ -277,15 +277,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.1.0/rr-4.1.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-4.1.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/4.2.0/rr-4.2.0-Linux-$(uname -m).rpm +sudo dnf install rr-4.2.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.1.0/rr-4.1.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-4.1.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/4.2.0/rr-4.2.0-Linux-$(uname -m).deb +sudo dpkg -i rr-4.2.0-Linux-$(uname -m).deb
    From 70e07ae86529230cbd90bdaf85258a24bf47c25e Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Fri, 1 Jul 2016 00:17:12 +1200 Subject: [PATCH 068/100] Release 4.3.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index a506e76faf8..50462339527 100644 --- a/index.html +++ b/index.html @@ -277,15 +277,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.2.0/rr-4.2.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-4.2.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/4.3.0/rr-4.3.0-Linux-$(uname -m).rpm +sudo dnf install rr-4.3.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.2.0/rr-4.2.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-4.2.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/4.3.0/rr-4.3.0-Linux-$(uname -m).deb +sudo dpkg -i rr-4.3.0-Linux-$(uname -m).deb
    From 7d02d10457f5299ba0a6c18d3225df2c8ce47acd Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Sat, 1 Oct 2016 22:33:22 +1300 Subject: [PATCH 069/100] Release 4.4.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 50462339527..36e445b0b6c 100644 --- a/index.html +++ b/index.html @@ -277,15 +277,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.3.0/rr-4.3.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-4.3.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/4.4.0/rr-4.4.0-Linux-$(uname -m).rpm +sudo dnf install rr-4.4.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.3.0/rr-4.3.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-4.3.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/4.4.0/rr-4.4.0-Linux-$(uname -m).deb +sudo dpkg -i rr-4.4.0-Linux-$(uname -m).deb
    From 34f05cafdf61cfc2d7217e4fe8f321ce89061f25 Mon Sep 17 00:00:00 2001 From: Kyle Huey Date: Sun, 23 Oct 2016 20:01:14 -0700 Subject: [PATCH 070/100] Link to the new CI server. --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 36e445b0b6c..18baf690d0b 100644 --- a/index.html +++ b/index.html @@ -156,7 +156,7 @@

    rr

    • github
    • -
    • travis-ci
    • +
    • ci
    • mailing list
    • news
    • From d85a46a3786470274a8766c2fdd259f8088c0d64 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Sat, 4 Feb 2017 22:28:38 +1300 Subject: [PATCH 071/100] Release 4.5.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 18baf690d0b..c6a008be182 100644 --- a/index.html +++ b/index.html @@ -277,15 +277,15 @@

      Build from source

      Or in Fedora:

      cd /tmp
      -wget https://github.com/mozilla/rr/releases/download/4.4.0/rr-4.4.0-Linux-$(uname -m).rpm
      -sudo dnf install rr-4.4.0-Linux-$(uname -m).rpm
      +wget https://github.com/mozilla/rr/releases/download/4.5.0/rr-4.5.0-Linux-$(uname -m).rpm +sudo dnf install rr-4.5.0-Linux-$(uname -m).rpm

      Or in Ubuntu:

      cd /tmp
      -wget https://github.com/mozilla/rr/releases/download/4.4.0/rr-4.4.0-Linux-$(uname -m).deb
      -sudo dpkg -i rr-4.4.0-Linux-$(uname -m).deb
      +wget https://github.com/mozilla/rr/releases/download/4.5.0/rr-4.5.0-Linux-$(uname -m).deb +sudo dpkg -i rr-4.5.0-Linux-$(uname -m).deb
      From 1f13ee2aa1f5075124f80b6d145385eb08813c80 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 5 Sep 2017 13:27:02 +1200 Subject: [PATCH 072/100] Summarize rr features --- index.html | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/index.html b/index.html index c6a008be182..70ac0d41ada 100644 --- a/index.html +++ b/index.html @@ -175,6 +175,18 @@

      rr also provides efficient reverse execution

      rr works on real applications such as Firefox, with low overhead. It is being used by many developers inside and outside Mozilla to fix real bugs.

      +

      rr features: +
        +
      • Low overhead compared to other similar tools, especially on mostly-single-threaded workloads +
      • Supports recording and replay of all kinds of applications: Firefox, Chrome, QEMU, LibreOffice, + Go programs, ... +
      • Record, replay and debug multiple-process workloads, including entire containers +
      • Durable, + compact traces that + can be ported between machines +
      • Chaos mode to + make intermittent bugs more reproducible +

      the rr debugging experience

      From bc03cb6df2bba205d29521f219b6b40280c3b293 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 5 Sep 2017 13:45:59 +1200 Subject: [PATCH 073/100] Some more edits --- index.html | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 70ac0d41ada..b57561d2f1e 100644 --- a/index.html +++ b/index.html @@ -165,16 +165,18 @@

      rr

      what rr does

      -

      rr aspires to be your primary debugging tool, replacing — +

      rr aspires to be your primary C/C++ debugging tool for Linux, replacing — well, enhancing — gdb. You record a failure once, then debug the recording, deterministically, as many times as you want. The same execution is replayed every time.

      rr also provides efficient reverse execution under gdb. Set breakpoints and data watchpoints and quickly reverse-execute to where they were hit.

      -

      rr works on real applications such as Firefox, with low overhead. - It is being used by many developers - inside and outside Mozilla to fix real bugs.

      +

      rr works on real applications and is used + by many + developers + to fix real bugs. It makes debugging hard bugs much easier, but also speeds up + debugging of easy bugs.

      rr features:
      • Low overhead compared to other similar tools, especially on mostly-single-threaded workloads From cf2665841ea3079acaee448eca5ec85a76fffafa Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 5 Sep 2017 13:52:47 +1200 Subject: [PATCH 074/100] Mention IDE integration --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index b57561d2f1e..42fa67401d1 100644 --- a/index.html +++ b/index.html @@ -183,6 +183,7 @@

        rr features:
      • Supports recording and replay of all kinds of applications: Firefox, Chrome, QEMU, LibreOffice, Go programs, ...
      • Record, replay and debug multiple-process workloads, including entire containers +
      • Works with gdb scripting and IDE integration
      • Durable, compact traces that can be ported between machines From 5b592bc90c876f6cc2eac72ae0860de92cb7a0ad Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 5 Sep 2017 14:03:06 +1200 Subject: [PATCH 075/100] Refer to technical report --- index.html | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 42fa67401d1..688b8cbd0b0 100644 --- a/index.html +++ b/index.html @@ -437,10 +437,8 @@

        limitations

        further reference

        - This presentation - provides an overview of the rr implementation and is meant for - potential rr developers. There are some bonus slides intended - to introduce rr to record/replay researchers. + The Extended Technical Report + is our best overview of how rr works and performs.

        The rr wiki contains pages that cover technical topics related to rr. @@ -453,7 +451,7 @@

        further reference

        mozilla - © 2015 + © 2015-2017

    From 3a0ac985b7548af732330f25101ba8951e95b90f Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 7 Sep 2017 16:52:56 +1200 Subject: [PATCH 076/100] Release 5.0.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 688b8cbd0b0..ddb3284edaf 100644 --- a/index.html +++ b/index.html @@ -292,15 +292,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.5.0/rr-4.5.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-4.5.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/5.0.0/rr-5.0.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.0.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/4.5.0/rr-4.5.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-4.5.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/5.0.0/rr-5.0.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.0.0-Linux-$(uname -m).deb
    From ba0b7e06f5b527a4f6719b452a1f3d6e944ee530 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 12 Sep 2017 11:59:26 +1200 Subject: [PATCH 077/100] Fix link --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index ddb3284edaf..ffed9beff33 100644 --- a/index.html +++ b/index.html @@ -174,7 +174,7 @@

    rr also provides efficient reverse execution reverse-execute to where they were hit.

    rr works on real applications and is used by many - developers + developers to fix real bugs. It makes debugging hard bugs much easier, but also speeds up debugging of easy bugs.

    rr features: From a3748e123bc91efb5be92a3e050f730da36ef360 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 14 Dec 2017 17:39:03 +1300 Subject: [PATCH 078/100] Release 5.1.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index ffed9beff33..5d93b97f448 100644 --- a/index.html +++ b/index.html @@ -292,15 +292,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.0.0/rr-5.0.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.0.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/5.1.0/rr-5.1.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.1.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.0.0/rr-5.0.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.0.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/5.1.0/rr-5.1.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.1.0-Linux-$(uname -m).deb
    From 7c2b70336ccacefbfedcafedf0bb7ea83bc52563 Mon Sep 17 00:00:00 2001 From: rocallahan Date: Wed, 2 May 2018 10:57:27 +1200 Subject: [PATCH 079/100] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index 3e6a6179f2f..00000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -rr-project.org From a981211835d28eefd6272a983e6c5c4a76d8856d Mon Sep 17 00:00:00 2001 From: rocallahan Date: Wed, 2 May 2018 10:57:34 +1200 Subject: [PATCH 080/100] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..ea2a216bbda --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +rr-project.org \ No newline at end of file From a73a537bf71e593b346d06b738abb78bd0ddd1da Mon Sep 17 00:00:00 2001 From: rocallahan Date: Wed, 2 May 2018 11:32:27 +1200 Subject: [PATCH 081/100] Delete CNAME --- CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 CNAME diff --git a/CNAME b/CNAME deleted file mode 100644 index ea2a216bbda..00000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -rr-project.org \ No newline at end of file From ea01c530e627613e5c1665c1891169a48f6a5bd7 Mon Sep 17 00:00:00 2001 From: rocallahan Date: Wed, 2 May 2018 11:32:44 +1200 Subject: [PATCH 082/100] Create CNAME --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..ea2a216bbda --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +rr-project.org \ No newline at end of file From 0b13cee5cff5b792ada003319f7d2b1964daec92 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Sat, 26 May 2018 21:43:03 +1200 Subject: [PATCH 083/100] Release 5.2.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 5d93b97f448..82c44971311 100644 --- a/index.html +++ b/index.html @@ -292,15 +292,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.1.0/rr-5.1.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.1.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/5.2.0/rr-5.2.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.2.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.1.0/rr-5.1.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.1.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/5.2.0/rr-5.2.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.2.0-Linux-$(uname -m).deb
    From 8396fb89dd58944392c157b605ad36416e913ab0 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 19 Dec 2019 00:26:13 +1300 Subject: [PATCH 084/100] Release 5.3.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 82c44971311..082fef5b544 100644 --- a/index.html +++ b/index.html @@ -292,15 +292,15 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.2.0/rr-5.2.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.2.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/5.3.0/rr-5.3.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.3.0-Linux-$(uname -m).rpm

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.2.0/rr-5.2.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.2.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/5.3.0/rr-5.3.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.3.0-Linux-$(uname -m).deb
    From 370fc606d5eafbc4b723997035e27719a1fe445f Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Mon, 27 Jan 2020 12:13:54 +1300 Subject: [PATCH 085/100] Migrate to chat.mozilla.org --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 082fef5b544..62ab2387551 100644 --- a/index.html +++ b/index.html @@ -160,7 +160,7 @@

    rr

  • mailing list
  • news
  • -
  • #rr on irc.mozilla.org
  • +
  • #rr on chat.mozilla.org
  • From a46ac56048f43c88efca21316bc2cd35c42fbcc4 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Sun, 24 May 2020 21:26:01 +1200 Subject: [PATCH 086/100] Fix reference to irc.mozilla.org --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 62ab2387551..0ddebb30393 100644 --- a/index.html +++ b/index.html @@ -444,7 +444,7 @@

    further reference

    contains pages that cover technical topics related to rr.

    Ask on the mailing - list or on #rr on irc.mozilla.org if you have questions about rr. + list or on #rr on chat.mozilla.org if you have questions about rr.

    From 3bb5b4eee8ee953cb0a2bf3efecbd995b12d29f9 Mon Sep 17 00:00:00 2001 From: Sagar Patel Date: Wed, 3 Jun 2020 13:00:45 -0400 Subject: [PATCH 087/100] Add new install option for Fedora. --- index.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.html b/index.html index 0ddebb30393..be971c10e92 100644 --- a/index.html +++ b/index.html @@ -294,6 +294,8 @@

    Or in Fedora:

    cd /tmp
     wget https://github.com/mozilla/rr/releases/download/5.3.0/rr-5.3.0-Linux-$(uname -m).rpm
     sudo dnf install rr-5.3.0-Linux-$(uname -m).rpm
    +

    You can also install rr directly from the package manager.

    +
    sudo dnf install rr
    From 38a45654bc2d6dcfffd805c8ff20fb6974d398d1 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 29 Oct 2020 12:53:41 +1300 Subject: [PATCH 088/100] Release 5.4.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index be971c10e92..a57af856360 100644 --- a/index.html +++ b/index.html @@ -292,8 +292,8 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.3.0/rr-5.3.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.3.0-Linux-$(uname -m).rpm
    +wget https://github.com/mozilla/rr/releases/download/5.4.0/rr-5.4.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.4.0-Linux-$(uname -m).rpm

    You can also install rr directly from the package manager.

    sudo dnf install rr
    @@ -301,8 +301,8 @@

    Or in Fedora:

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.3.0/rr-5.3.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.3.0-Linux-$(uname -m).deb
    +wget https://github.com/mozilla/rr/releases/download/5.4.0/rr-5.4.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.4.0-Linux-$(uname -m).deb
    From 8c1339e36851e507f734e5b3afa91f2652c355bf Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 29 Oct 2020 12:56:50 +1300 Subject: [PATCH 089/100] Remove 'install from package manager' until the package is updated --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index a57af856360..edf03d14422 100644 --- a/index.html +++ b/index.html @@ -294,8 +294,8 @@

    Or in Fedora:

    cd /tmp
     wget https://github.com/mozilla/rr/releases/download/5.4.0/rr-5.4.0-Linux-$(uname -m).rpm
     sudo dnf install rr-5.4.0-Linux-$(uname -m).rpm
    -

    You can also install rr directly from the package manager.

    -
    sudo dnf install rr
    +
    From ea84b21d08634439df3a3936659dd891c84e1594 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Sat, 14 Nov 2020 15:44:04 +1300 Subject: [PATCH 090/100] Switch references to rr-debugger repo --- index.html | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/index.html b/index.html index edf03d14422..fb605d838cd 100644 --- a/index.html +++ b/index.html @@ -119,7 +119,7 @@ - Fork me on GitHub + Fork me on GitHub
    @@ -155,11 +155,11 @@

    rr

    @@ -173,7 +173,7 @@

    rr also provides efficient reverse execution under gdb. Set breakpoints and data watchpoints and quickly reverse-execute to where they were hit.

    rr works on real applications and is used - by many + by many developers to fix real bugs. It makes debugging hard bugs much easier, but also speeds up debugging of easy bugs.

    @@ -183,7 +183,7 @@

    rr features:
  • Supports recording and replay of all kinds of applications: Firefox, Chrome, QEMU, LibreOffice, Go programs, ...
  • Record, replay and debug multiple-process workloads, including entire containers -
  • Works with gdb scripting and IDE integration +
  • Works with gdb scripting and IDE integration
  • Durable, compact traces that can be ported between machines @@ -284,7 +284,7 @@

    getting started

    Build from source

    - Follow + Follow these instructions. Recommended if the packages don't work for you --- kernel changes and OS updates sometimes require rr changes.
  • @@ -292,7 +292,7 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.4.0/rr-5.4.0-Linux-$(uname -m).rpm
    +wget https://github.com/rr-debugger/rr/releases/download/5.4.0/rr-5.4.0-Linux-$(uname -m).rpm
     sudo dnf install rr-5.4.0-Linux-$(uname -m).rpm
    @@ -301,18 +301,18 @@

    Or in Fedora:

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/mozilla/rr/releases/download/5.4.0/rr-5.4.0-Linux-$(uname -m).deb
    +wget https://github.com/rr-debugger/rr/releases/download/5.4.0/rr-5.4.0-Linux-$(uname -m).deb
     sudo dpkg -i rr-5.4.0-Linux-$(uname -m).deb

    Running rr

    - Follow the + Follow the usage instructions to learn how to use rr.

    If you're using rr to debug Firefox, you may find - + these setup instructions helpful. They cover how to use rr to record Firefox test suites.

    @@ -346,8 +346,7 @@

    background and motivation

    gdb's reverse execution commands.

    These goals have all been met. rr is not only a working - tool, but it's being used regularly by developers inside and outside - Mozilla. + tool, but it's being used regularly by developers on many large and small projects.

    rr records a group of Linux user-space processes and captures all inputs to those processes from the kernel, plus any nondeterministic CPU @@ -427,12 +426,12 @@

    limitations

    have tackled with rr — but support isn't complete, so running rr on your application may uncover a syscall that needs to be implemented. Please - file github issues + file github issues for unsupported system calls.
  • sometimes needs to be updated in response to kernel changes, updates to system libraries, or new CPU families. If rr isn't working for you (and the above caveats do not apply), please - file an issue. + file an issue. @@ -442,19 +441,12 @@

    further reference

    The Extended Technical Report is our best overview of how rr works and performs.

    - The rr wiki + The rr wiki contains pages that cover technical topics related to rr.

    Ask on the mailing list or on #rr on chat.mozilla.org if you have questions about rr. - -

    -

    - mozilla - © 2015-2017 -

    - - - - From 95acd6ea9749a45e588e0b1ae6407b5903b504da Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Sun, 7 Aug 2022 21:32:49 +1200 Subject: [PATCH 096/100] Release 5.6.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 4b0cf4bec5f..77aaa7054de 100644 --- a/index.html +++ b/index.html @@ -297,8 +297,8 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.5.0/rr-5.5.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.5.0-Linux-$(uname -m).rpm
    +wget https://github.com/rr-debugger/rr/releases/download/5.6.0/rr-5.6.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.6.0-Linux-$(uname -m).rpm
    @@ -306,8 +306,8 @@

    Or in Fedora:

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.5.0/rr-5.5.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.5.0-Linux-$(uname -m).deb
    +wget https://github.com/rr-debugger/rr/releases/download/5.6.0/rr-5.6.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.6.0-Linux-$(uname -m).deb
    From a22bcab787bfa5b2adfd8ae15e2af409d22cb52d Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Mon, 7 Aug 2023 00:15:58 +1200 Subject: [PATCH 097/100] Update CPU support text --- index.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/index.html b/index.html index 77aaa7054de..b2e5cb26aa7 100644 --- a/index.html +++ b/index.html @@ -422,9 +422,7 @@

    limitations

    outside the recording tree. This is an inherent feature of the design. rr automatically disables features such as X shared memory for recorded processes to avoid this problem. -
  • requires a reasonably modern x86 CPU. It depends on certain - performance counter features that are not available in older - CPUs. +
  • requires a reasonably modern x86 CPU or certain ARM CPUs (Apple M1+).
  • requires knowledge of every system call executed by the recorded processes. It already supports a wide range of syscalls — those needed by Firefox and other applications people From 1e06cc22203bd49a303369e590a52eadffb48784 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Tue, 3 Oct 2023 22:17:05 +1300 Subject: [PATCH 098/100] Release 5.7.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index b2e5cb26aa7..e4d43253bd0 100644 --- a/index.html +++ b/index.html @@ -297,8 +297,8 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.6.0/rr-5.6.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.6.0-Linux-$(uname -m).rpm
    +wget https://github.com/rr-debugger/rr/releases/download/5.7.0/rr-5.7.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.7.0-Linux-$(uname -m).rpm
    @@ -306,8 +306,8 @@

    Or in Fedora:

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.6.0/rr-5.6.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.6.0-Linux-$(uname -m).deb
    +wget https://github.com/rr-debugger/rr/releases/download/5.7.0/rr-5.7.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.7.0-Linux-$(uname -m).deb
    From 658b240b037362bf744eacc0b0dcc9232a407ddf Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Mon, 20 May 2024 23:37:55 +1200 Subject: [PATCH 099/100] Release 5.8.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index e4d43253bd0..f89b8edc729 100644 --- a/index.html +++ b/index.html @@ -297,8 +297,8 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.7.0/rr-5.7.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.7.0-Linux-$(uname -m).rpm
    +wget https://github.com/rr-debugger/rr/releases/download/5.8.0/rr-5.8.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.8.0-Linux-$(uname -m).rpm
    @@ -306,8 +306,8 @@

    Or in Fedora:

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.7.0/rr-5.7.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.7.0-Linux-$(uname -m).deb
    +wget https://github.com/rr-debugger/rr/releases/download/5.8.0/rr-5.8.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.8.0-Linux-$(uname -m).deb
    From b4f58cc644346e10cae9cc5c2890872d41abc520 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Thu, 13 Feb 2025 23:45:31 +1300 Subject: [PATCH 100/100] Release 5.9.0. --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index f89b8edc729..ac0a2a4ecd7 100644 --- a/index.html +++ b/index.html @@ -297,8 +297,8 @@

    Build from source

    Or in Fedora:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.8.0/rr-5.8.0-Linux-$(uname -m).rpm
    -sudo dnf install rr-5.8.0-Linux-$(uname -m).rpm
    +wget https://github.com/rr-debugger/rr/releases/download/5.9.0/rr-5.9.0-Linux-$(uname -m).rpm +sudo dnf install rr-5.9.0-Linux-$(uname -m).rpm
    @@ -306,8 +306,8 @@

    Or in Fedora:

    Or in Ubuntu:

    cd /tmp
    -wget https://github.com/rr-debugger/rr/releases/download/5.8.0/rr-5.8.0-Linux-$(uname -m).deb
    -sudo dpkg -i rr-5.8.0-Linux-$(uname -m).deb
    +wget https://github.com/rr-debugger/rr/releases/download/5.9.0/rr-5.9.0-Linux-$(uname -m).deb +sudo dpkg -i rr-5.9.0-Linux-$(uname -m).deb