Make the lock check in erts_is_code_ix_locked() stronger

Make sure that the the currently running thread has the lock,
not only that that some thread has the lock.
Add trace_local_SUITE:concurrency/1
Change the data structures for breakpoints

Change the data structures for breakpoints to make it possible
(in a future commit) to manage breakpoints without taking down the
system to single-scheduling mode.

The current "breakpoint wheel" data structure (a circular,
double-linked list of breakpoints) was invented before the
SMP emulator. To support it in the SMP emulator, there is essentially
one breakpoint wheel per scheduler. As more breakpoint types have
been added, the implementation has become messy and hard to understand
and maintain.

Therefore, the time for a rewrite has come. Use one struct to hold
all breakpoint data for a breakpoint in a function. Use a flag field
to indicate what different type of break actions that are enabled.
Refactor the code for managing breakpoints

To allow us to manage breakpoints without going to single-scheduler
mode, we will need to update the breakpoints in several stages with
memory barriers in between each stage. Prepare for that by splitting
up the breakpoint setting and clearing functions into several smaller
functions.
Don't go to single-scheduler mode when managing breakpoints

Calls to erlang:set_trace_pattern/3 will no longer block all
other schedulers.

We will still go to single-scheduler mode when new code is loaded
for a module that is traced, or when loading code when there is a
default trace pattern set. That is not impossible to fix, but that
requires much closer cooperation between tracing BIFs and the loader
BIFs.
Strengthen trace test cases
Merge branch 'bjorn/erts/breakpoints/OTP-10122'

* bjorn/erts/breakpoints/OTP-10122:
  Strengthen trace test cases
  Don't go to single-scheduler mode when managing breakpoints
  Refactor the code for managing breakpoints
  Change the data structures for breakpoints
  Add trace_local_SUITE:concurrency/1
  Make the lock check in erts_is_code_ix_locked() stronger
Fix nonsense of eprof doc
doc: Update MacOSX install HowTo for Xcode 4.3
Merge branch 'egil/install-osx' into maint
Merge branch 'maint'
Correct the type of the disk log header

Thanks to Niclas Eklund.
Merge branch 'hb/kernel/fix_spec_disk_log/OTP-10131' into maint

* hb/kernel/fix_spec_disk_log/OTP-10131:
  Correct the type of the disk log header
Merge branch 'maint'

* maint:
  Correct the type of the disk log header
Change pollset implementation to use one pollset for each scheduler

In our proxy project which has massive network IO, we found erts_check_io()
become system bottleneck, a call to erts_check_io() would take 500 microseconds,
and cannot be invoked more than two thousand times per second under heavy preesure,
which resulted in the average response time of user request longer than 2 milliseconds,
so that limited system throughput down, while cpus were idle(in starvation)
at the same time.

This patch allocates one pollset for each scheduler, so that each scheduler could invoke
erts_check_io() on its own pollset concurrently. To be incorporate well with port migration,
all used fd in each port're recorded, removed from old scheduler's pollset and
added to new scheduler's when port is migrating between schedulers.

After applying this patch, together with binding process&port with schedulers,
erts_check_io() is invoked 20 thousands times per second (10 times more than before on
our 16 cores machine), and throughtput increases from 45k to 105k, so it works.