Serhei Makarov [Tue, 29 May 2018 17:33:49 +0000 (13:33 -0400)]
Merge branch 'serhei/rt-fixes-clean'
Initial round of fixes for RHBZ1272304 to make systemtap work better on the
realtime (CONFIG_PREEMPT_RT_FULL) kernel. These fixes do not solve all of the
rule violations that occur (and get reported to dmesg on kernel-rt-debug) but
they do make it possible for SystemTap to get through the entire testsuite on
kernel-rt without locking up the system.
Merging rather than rebasing since only the final commit of the branch is 'safe'.
Jafeer Uddin [Tue, 29 May 2018 13:28:17 +0000 (09:28 -0400)]
Added ability to send test results via http to a url
* testsuite/Makefile.am: Expanded check for DEJAZILLA to distinguish
between email address and url, and send test results to the corresponding
destination.
* testsuite/Makefile.in: Regenerated.
* testsuite/configure.ac: Updated messages to reflect the added feature.
* testsuite/configure: Regenerated.
Jeff Moyer [Fri, 11 May 2018 19:25:52 +0000 (15:25 -0400)]
io_submit.stp: let the user know when the script is loaded
I often find myself checking lsmod to see when the script is finally
ready to collect data. Just print a message from the begin probe to
make it obvious when the script is ready.
Jeff Moyer [Fri, 11 May 2018 19:25:51 +0000 (15:25 -0400)]
io_submit.stp: use an accumulator for traces
On very large systems, we get a lot of skipped probes due to lock
contention on the traces array. The end result is that we don't
get any data for such systems. Simply converting the traces array
to an accumulator resolves this issue in testing (on a highly-
loaded 288 cpu system).
probe syscall.io_submit.return {
/* this assumes a given proc will do lots of io_submit calls, and
* so doesn't do the more expensive "delete in_iosubmit[p]". If
* there are lots of procs doing small number of io_submit calls,
* the hash may grow pretty big, so using delete may be better
*/
in_iosubmit[tid()] = 0
}
However, the test to see if a thread is currently executing in io_submit
is performed using the membership operator 'in':
if (tid() in in_iosubmit)
This is obviously wrong. We can do one of two things:
1) change the test to if (in_iosubmit[tid()] == 1) or
2) just perform the delete in the return probe
While I agree that we typically have a small number of threads performing
io_submit, I don't believe there is substance to the performance claims
for the delete operator. So, I've opted for solution 2.
David Smith [Wed, 23 May 2018 17:37:07 +0000 (12:37 -0500)]
Change the http docker backend to run systemtap in the container image.
* httpd/backends.cxx (docker_backend::generate_module): Switch back to
running systemtap inside the container. Trying to use the container
image as a sysroot didn't work well. Trying to run systemtap on the
sysroot worked fine, but running gcc 8 (f28) against a centos 7
sysroot's kernel source failed. Trying to run the centos 7 gcc from f28
kept crashing. So, we're back to running systemtap in the container
image.
Martin Cermak [Thu, 17 May 2018 08:51:18 +0000 (10:51 +0200)]
Fix testcase systemtap.string/text_str.exp
PR22991 (Invalid truncation of quoted strings) was fixed in
commit fa4f499d8c92600702853d763ae3ea45002c07e3, but respective
change hasn't been applied to systemtap.string/text_str.exp.
Adding the missing bit.
Commit 2f6fcfc6 (Fix BZ1546179 by being careful when accessing
sk_buff structures) made the "unprivileged_embedded_C.exp"
testcase unhappy. It started to report false positives.
Thing is that embeddedc.awk can't correctly parse two block
boundaries at a line, which is exactly what the commit introduces
by adding "} catch { }", or "try { ... } catch { }". Here is the
failure as observed with git stap 0e051c5:
* bpf-internal.h (BPF_FUNC_map_get_next_key): add id for map_get_next_key.
* bpfinterp.cxx (bpf_interpret): call map_get_next_key when function id equals
BPF_FUNC_map_get_next_key. (map_get_next_key): wrapper for bpf_get_next_key
that includes support for limiting number of iterations and iterating in
ascending/descending order.
David Smith [Mon, 7 May 2018 19:14:12 +0000 (14:14 -0500)]
Send the target executable over to the http server.
* httpd/backends.cxx (docker_backend::generate_module): Add the date and
time to the docker image name, to make them easier to remove. Copy any
target files from the zip file into the docker image.
* client-http.cxx (http_client::get_rpmname): If an rpm doesn't contain
the file we're searching for, just return the empty string.
(http_client_backend::include_file_or_directory): Only include the file
or directory in the command line arguments if the callers asks.
(http_client_backend::package_request): Move code from
http_client_backend::find_and_connect_to_server(). If get_rpmname()
returns the empty string, add the file so that it will get transferred
over to the server.
(http_client_backend::find_and_connect_to_server): Move code to
http_client_backend::package_request().
* client-http.h (http_client_backend::include_file_or_directory): Updated
prototype.
* client-nss.cxx (nss_client_backend::include_file_or_directory): Only
include the file or directory in the command line arguments if the
callers asks.
* client-nss.h (nss_client_backend::include_file_or_directory): Updated
prototype.
* csclient.h: Updated client_backend::include_file_or_directory()
prototype.
add DEBUG_MEMALLOC_MIGHT_SLEEP option to check for memory allocations in RT-atomic
If DEBUG_MEMALLOC_MIGHT_SLEEP is defined (stap -DDEBUG_MEMALLOC_MIGHT_SLEEP ...)
then all memory allocation operations are assumed to sleep. This
can be used to check whether any memory allocations occur in atomic
context, which is discouraged on realtime kernels.
* runtime/linux/alloc.c (DEBUG_MEMALLOC_MIGHT_SLEEP): new optional define.
(_stp_kmalloc_gfp, _stp_kmalloc_node_gfp, _stp_kzalloc_node_gfp, _stp_kfree,
_stp_vfree, _stp_free_percpu): trigger might_sleep() on DEBUG_MEMALLOC_MIGHT_SLEEP.
kernel-rt fix: delay cleanup of utrace struct after removal from task_utrace_table
Since utrace->lock is now an ordinary spinlock, we cannot grab it in a
(raw) task_utrace_lock section, nor can we do memory management on kernel-rt
in a raw_spinlock section. Thus, in utrace_exit(), we dump utrace structures
to a separate hlist (guarded by a separate, non-raw utrace_cleanup_lock) before
calling utrace_cleanup() to free them.
* runtime/stp_utrace.c (utrace_cleanup_list, utrace_cleanup_lock): new data structures.
(utrace_exit): dump utrace structures to utrace_cleanup_list before releasing
task_utrace_lock and then actually cleaning up.
(utrace_cleanup): now requires utrace_cleanup_lock instead of task_utrace_lock.
kernel-rt fix: use task_work to defer reporting of stp_utrace events
Since utrace->lock is now a regular spinlock, it cannot be taken in tracepoint context.
This patch introduces a queue of task_work structures that the reporting functions
in stp_utrace.c can use to delay reporting work that requires taking utrace->lock.
* stp_utrace.c (STP_UTRACE_USE_TASK_WORK_QUEUE): new define.
(__stp_utrace_task_work_list, __stp_utrace_task_work_list_lock,
__stp_utrace_task_work): new data structures.
(UTRACE_TASK_WORK_POOL_SIZE): new define, configure with -DUTRACE_TASK_WORK_POOL_SIZE
(__stp_utrace_task_work_pool_bitmap, __stp_utrace_task_work_pool,
__stp_utrace_task_work_pool_lock): new data structures.
(__stp_utrace_alloc_task_work): new function.
(__stp_utrace_save_regs): new function.
(__stp_utrace_free_task_work_from_pool): new function.
(__stp_utrace_free_task_work): new function.
(utrace_exit): free task_work_list items on exit.
(utrace_cancel_all_task_work): clean up code, also cancel task_work_list items.
(utrace_free): clean up code.
(utrace_report_exec): defer reporting to utrace_exec_work().
(utrace_exec_work): new function.
(utrace_report_syscall_entry): defer reporting to utrace_syscall_entry_work().
(utrace_syscall_entry_work): new function.
(utrace_report_syscall_exit): defer reporting to utrace_syscall_exit_work().
(utrace_syscall_exit_work): new function.
(utrace_report_clone): defer reporting to utrace_clone_work().
(utrace_clone_work): new function.
Serhei Makarov [Mon, 26 Mar 2018 20:30:59 +0000 (16:30 -0400)]
kernel-rt fix: change utrace->lock to a regular spinlock
In utrace_control(), stp_lock_task_sighand() cannot be invoked in a raw-spinlock
section on kernel-RT. Therefore, we must change utrace->lock to a regular,
non-raw spinlock. (This change introduces additional issues to be fixed in subsequent
commits.)
Serhei Makarov [Thu, 15 Mar 2018 20:26:55 +0000 (16:26 -0400)]
kernel-rt fix: avoid locking in __stp_time_init()
* runtime/time.c (stp_init_time): avoid invoking seqlock inside
an interrupts-disabled section.
The problem is that __stp_init_time() is invoked in an interrupts-disabled
section created by on_each_cpu(). This prevents it from being able to safely
grab seqlock.
My reasoning is that because __stp_time_init() is initializing the
seqlock, it is safe to assume no one else will be trying to grab it until
we return. So we can dispense with locking at this point.
Serhei Makarov [Wed, 14 Mar 2018 19:42:08 +0000 (15:42 -0400)]
kernel-rt fix: use stp_spinlock for _stp_ctl_ready_q
_stp_ctl_ready_lock and _stp_ctl_special_msg_lock are locked within an atomic
context created by _stp_runtime_entryfn_get_context()/_put_context().
This is only legal on kernel-rt if the locks are raw stp_spinlocks.
* stapbpf.cxx (collect_uprobes, register_uprobes, unregister_uprobes): read uprobe
information from the .bo file, register/unregister uprobes via debugfs.
* tapsets.cxx (sort_for_bpf): create section names for each uprobe.
* tapsets.h: add necessary declarations.
* bpf_tests/uprobes.stp: smoke test for stapbpf uprobe support.
* bpf.exp: when running bpf_tests/uprobes.stp, spawn a process that triggers the test's probes.
Mark Wielaard [Sun, 22 Apr 2018 20:50:55 +0000 (22:50 +0200)]
dwflpp::resolve_prologue_endings should use dwarf_haspc, not highpc.
A function can have multiple non-consecutive ranges (for example when
a function is split into a hot and cold part, that are put in separate
sections). resolve_prologue_endings would use the highpc attribute of
a function DIE to see if an address was "beyond" the function (and so
also beyond the prologue). That could cause unexpected errors when
the DIE didn't have a highpc, but only a lowpc and ranges attribute.
Use dwarf_haspc () instead to test whether an address is inside a
function.
See also https://sourceware.org/ml/systemtap/2018-q2/msg00029.html
RHBZ1552745: staprun to set /proc/sys/kernel/kptr_restrict=1 on linux >= v4.15
Kernels >= 4.15 obscure /sys/module/$MODULE/section/$SECTION pointers
even to root users, unless kptr_restrict is set to 1. Since we need
this information unobscured for module section-address configuration
at module startup, set that flag, unless $STAP_BZ1552745_OVERRIDE
exists.
PR22991: Store escape sequence pointer before early break
runtime/stp_string.c (_stp_text_str): Capture the escape sequence
pointer before a possible while loop break instead of after. Needed
for correct truncation of UTF-8 literals. Also rename variable 'len'
to 'esc_len' for better clarity.
Mark Wielaard [Wed, 18 Apr 2018 13:00:24 +0000 (15:00 +0200)]
Make kernel DWARF unwinder work with ksalr.
The .debug_frame loaded from disk is already relocated against the
expected load offset of the kernel, but the actual static (load)
address might be different (with kaslr). So adjust the startLoc
for that difference when reading any address from the unwind table.
David Smith [Tue, 17 Apr 2018 16:04:30 +0000 (11:04 -0500)]
Change the http docker backend to use the docker image as a sysroot.
* httpd/backends.cxx (docker_backend::generate_module): Switch from
running systemtap in the docker container to mounting the container and
using it as a sysroot.
* httpd/docker/fedora.json: Update the docker container to run
"symlinks".
* httpd/docker/centos.json: Ditto.
Code for newer kernels did not clear the address of the notes-section
when a probed module was unloaded. This caused spurious Build-id mismatch
when the module was reinserted as new addresses are not computed for
dynamically loaded modules (see also: PR23068) and the Build-id check
was trying to read the notes section at the no-longer-valid old address.
* runtime/sym.c (_stp_module_notifier): clear addresses on
MODULE_STATE_GOING in newer kernels (>=3.10) too.
* runtime/transport/symbols.c (_stp_kmodule_update_address): fix logic
error and clear notes section addr when reloc=NULL (aka. 'all').
David Smith [Tue, 17 Apr 2018 15:26:48 +0000 (10:26 -0500)]
Fix httpd/docker/fedora_install_package.py to correctly handle file paths.
* httpd/docker/fedora_install_package.py (PkgSystem.build_id_is_valid):
Handle 'UsrMove' feature by just comparing file basenames, instead of
full paths.
Mark Wielaard [Tue, 17 Apr 2018 12:36:13 +0000 (14:36 +0200)]
linux runtime: Add support for new kernel unwind fallback.
In newer kernels dump_trace got replaced by a new unwind infrastructure.
Add a new autoconf-unwind-stack-trace.c to detect whether we can use it.
Extend the runtime/stack.c _stp_stack_print_fallback with a new pt_regs*
argument. Update all callers and add dbug_unwind output to show which
fallback unwinder we are selecting (or if we are just giving up).
Rename the struct unwind_state in unwind.c and unwind.h to uw_state
because the old name now conflicts with the one used in the kernel.
David Smith [Mon, 16 Apr 2018 21:27:00 +0000 (16:27 -0500)]
Redirect all 'clog' output from the http server to the log file.
* httpd/main.cxx (parse_cmdline): Also send 'clog' output to the log file.
* nsscommon.cxx (start_log): Added an option to redirect 'clog' output to
the log file.
* nsscommon.h: Update start_log() prototype.
David Smith [Fri, 13 Apr 2018 13:15:29 +0000 (08:15 -0500)]
Clean up some http server memory leaks found by valgrind.
* httpd/api.cxx (resource::~result_info): New function.
(build_info::~build_info): Be sure to erase the result from the results
list.
(result_infos_erase): New function.
* httpd/backends.cxx (backends_atexit_handler): New function.
(get_backends): Run backends_atexit_handler() at exit.
* httpd/backends.h: Add virtual backend_base destructor.
* httpd/server.cxx (get_key_values): Call json_object_put() to free the
created json object.
David Smith [Wed, 11 Apr 2018 13:11:16 +0000 (08:11 -0500)]
The http server code now cleans up environment variables.
* httpd/api.cxx (response build_collection_rh::POST): Clean up the
environment variable list the client sends the server.
* httpd/main.cxx (main): Clean up the environment variables.
RHBZ1563052: fix off-by-one error in loc2c-runtime.h
The new version of kderef_string (added along with the new eBPF
runtime) copies an additional character compared to the old version.
* runtime/linux/loc2c-runtime.h (_stp_deref_string_nofault): reduce len by 1 to leave room for NUL terminator.
* testsuite/systemtap.base/set_kernel.stp: testcase for this bug.
David Smith [Thu, 5 Apr 2018 15:55:31 +0000 (10:55 -0500)]
The http client code now asks the server to delete the build info.
* client-http.cxx (http_client_backend::delete_op): Send a delete request
to the server.
(http_client_backend::unpack_response): After downloading everything,
call delete_op().
* httpd/api.cxx (individual_build_rh::DELETE): New function.
bpf_opt.cxx (allocate): Apply the addition checks added to merge()
in commit 883ecae33bb. (reg_alloc): change while loop to for loop
to better indicate how num_spills is updated.
Martin Cermak [Wed, 28 Mar 2018 09:50:13 +0000 (11:50 +0200)]
Fix the systemtap testsuite LD_LIBRARY_PATH.
The goal here is to ensure the right dyninst libraries are used.
Systemtap is not only packaged for base RHEL/CentOS, but also as
a part of SCL (red hat developer toolset). In case of SCL we need
to ensure that SCL version of systemtap tests against SCL version
of dyninst and the same is true for base os versions of both
components.
Before this change devtoolset version of systemtap was running
its tests against base rhel version of dyninst, and if that was
missing, dyninst tests were crashing.
This is a testsuite problem only, unrelated to normal stap usage.
Serhei Makarov [Fri, 23 Mar 2018 16:03:19 +0000 (12:03 -0400)]
PR22193: don't elide regex match '=~' operator since it's now side-effecting
NB: If we detected /* pragma: tagged_dfa */ earlier and set
session.need_tagged_dfa earlier, we would be able to safely elide
regex matches in programs that don't use the matched() tapset.
* elaborate.cxx (void_statement_reducer::visit_regex_query): Assume '=~' is side-effecting.
* staptree.h (varuse_collecting_visitor::visit_regex_query): New function.
* staptree.cxx (varuse_collecting_visitor::visit_regex_query): Assume '=~' is side-effecting.
* testsuite/runok/regex_noelide.stp: Make regex slightly more interesting.
Martin Cermak [Fri, 23 Mar 2018 13:37:07 +0000 (14:37 +0100)]
Fix the naming convention problem for python-setuptools.
There is no python2-setuptools.rpm for any of rhel{6,7}.
EPEL6 has python2-setuptools.rpm, but it merely is a dummy wrapper
for python-setuptools.rpm. ATM, there is no other reason to use EPEL
on RHEL than this, so it's better to avoid it entirely. RHEL7
depsolver can pair python-setuptools.rpm with python2-setuptools.rpm
via Provides, but there is no python2-setuptools.rpm for RHEL7
either. But Fedora does have python2-setuptools.rpm.
Victor Kamensky [Thu, 22 Mar 2018 21:02:02 +0000 (16:02 -0500)]
sysroot: fix short release -r option handling follow up
In case of sysroot set and short release -r option it does not make sense
to pass short release name into dwfl_linux_kernel_report_offline
function. This function is not aware about sysroot and it won't look for
kernel modules under sysroot directory.
David Smith [Thu, 22 Mar 2018 15:59:13 +0000 (10:59 -0500)]
Remove C++11 string member function use for RHEL6.
* session.cxx (parse_cmdline): Remove C++11 string member function use for
RHEL6. Functions include back(), front(), and push_back(), which can be
easily replaced.
* setupdwfl.cxx (debuginfo_path_insert_sysroot): Ditto.
* tapsets.cxx (path_remove_sysroot): Ditto.
* util.cxx (get_distro_info): Ditto.
(get_distro_info): Ditto.
David Smith [Wed, 21 Mar 2018 16:39:17 +0000 (11:39 -0500)]
Add lots more sysroot testing to systemtap.base/sysroot_sysenv.exp.
* testsuite/systemtap.base/sysroot_sysenv.exp: Add tests based on the 6
sysroot patches sent in by Victor Kamensky. These will hopefully keep
the sysroot functionality working. The tests use a custom mount
namespace to "move" the system's /usr/lib/debug and /lib/modules
directories into a sysroot directory.
Victor Kamensky [Wed, 21 Mar 2018 16:35:26 +0000 (11:35 -0500)]
sysroot: handle symbolic links with absolute name relative to sysroot
In case of symbolic link found under sysroot point to absolute path,
instead of trying to look for such absolute path in host system,
apply sysroot prefix first.
Aaron Merey [Tue, 20 Mar 2018 18:02:21 +0000 (14:02 -0400)]
BPF translator: array elements behave as if preinitialized to 0
Previously we exited a probe if there was an attempt to use an element
that an array did not contain. This does not match the behavior of the
default runtime which acts as though the element was preinitialized to
0. This commit changes the translator to match this behavior.
bpf-translate.cxx (visit_arrayindex): If map_lookup_elem returns 0,
set result to 0 instead of jumping to exit_block.
Victor Kamensky [Tue, 20 Mar 2018 17:41:05 +0000 (12:41 -0500)]
_stp_umodule_relocate needs target file path, not host file path
Strip of sysroot from module name is required when _stp_umodule_relocate
call is generated. Otherwise path won't match path on target and could
will fail to calculated address within the file.
Victor Kamensky [Mon, 19 Mar 2018 13:53:51 +0000 (08:53 -0500)]
Delay adding sysroot path to module name in case of non absolute executable
Current stap code adds sysroot prematurely for probes that specify non
absolute path name, i.e like "foo", so when find_executable called it
receives full path as <sysroot>/foo and find_executable does not search
PATH while applying sysroot.
Fix delays adding sysroot till path inside of sysroot is searched first.
Also fix missing sysroot addition in glob expansion case.
Frank Ch. Eigler [Thu, 15 Mar 2018 15:48:52 +0000 (11:48 -0400)]
stap-prep: prefer dnf to yum
Use dnf and dnf debuginfo-install if available, since these understand
some newer rpm constraints than yum does. e.g., "or" constraints
on rawhide kernels.
Victor Kamensky [Wed, 14 Mar 2018 22:09:44 +0000 (17:09 -0500)]
sysroot: fix short release -r option handling
* setupdwfl.cxx (debuginfo_path_insert_sysroot): Add a '/' to the end of
the sysroot for path_insert_sysroot().
(setup_dwfl_kernel): Simplify logic when finding the kernel path to send
to elfutils.
David Smith [Wed, 14 Mar 2018 22:05:25 +0000 (17:05 -0500)]
Make sure sysroot paths don't end with a slash.
* session.cxx (parse_cmdline): Make sure a sysroot path does not end with
a '/', since we build paths like: sysroot + "/lib/modules". If the
sysroot path ends with a '/', we end up with paths like
'/SYSROOT//lib/modules'.
(setup_kernel_release): Take a string parameter, not a character pointer.
* session.h: Update setup_kernel_release() prototype.
Victor Kamensky [Wed, 14 Mar 2018 21:54:08 +0000 (16:54 -0500)]
debuginfo lookup with sysroot case do not remove sysroot from file_name
If sysroot option is passed, and debug symbols reside in sysroot along
with executable <foo> in <foo_dir>/.debug/<foo_file> directory,
stap fails to find debuginfo because it strips out sysroot path
from file_name so dwfl_standard_find_debuginfo ends up looking at
host <foo_dir>/.debug/<foo_file> rather then checking
<sysroot>/<foo_dir>/.debug/<foo_file>.
Aaron Merey [Fri, 9 Mar 2018 23:27:21 +0000 (18:27 -0500)]
Improve BPF tracepoint probe derivation
One goal of BPF tracepoint probe derivation is to determine the offsets of the members
of the BPF tracepoint context structs. These members are the probe's context variables.
The context structs always contain 8 bytes of padding before their first member.
During the probe derivation process, the context structs are replicated in the tracequery
modules and we read the module's debuginfo in order to determine the offsets of the
struct's members. Previously, the 8 bytes of padding was not included in the tracequery
structs and instead 8 was added to the offsets of members of these structs. This approach
ignores the possibility that these 8 bytes of padding could influence the amount of
padding between the struct's other members. This would result in incorrect offsets.
This patch adds an 8 byte member to the front of each of the tracequery structs to ensure
they are proper replicas of the tracepoint context structs.
* stapregex.cxx (stapdfa::emit_declaration): Remove redundant code.
* stapregex-dfa.cxx (dfa::emit): Make sure to clean up to STAPREGEX_MAX_TAG.
* testsuite/runok/regex_grouping.stp: Add testcase.
Aaron Merey [Thu, 8 Mar 2018 21:42:11 +0000 (16:42 -0500)]
BPF tapset: use userspace naming conventions for pid(), tid()
* context.stp: Undo naming changes made in commit 2c0ba52a181ec.
pid() now returns the userspace pid of the target process instead
of its kernel pid. tid() now returns the userspace tid of the target
process instead of its kernel tgid.
Victor Kamensky [Thu, 8 Mar 2018 21:12:22 +0000 (15:12 -0600)]
Build fix regression on systems without nss.
After "eb3896ef0 Add the capability to list http servers." and
"3580be162 Move the code getting a certificate from a server into
each backend." commits on a system where nss-devel is not installed
or one build systemtap with --without-nss configure option, build
fails. Fix is simple add '#if HAVE_NSS' check around new code.
Aaron Merey [Thu, 8 Mar 2018 19:38:28 +0000 (14:38 -0500)]
BPF tapset: fix pid(), tid()
* context.stp: BPF_FUNC_get_current_pid_tgid returns tgid << 32 | pid,
so swap the names of pid() and tid(). Also replace tid()'s left shift
with a logical right shift.
David Smith [Fri, 2 Mar 2018 20:03:11 +0000 (14:03 -0600)]
Fix BZ1546179 by being careful when accessing sk_buff structures.
* tapset/linux/networking.stp: Fixed BZ1546179 by putting try/catch around
sk_buff structure accesses (because the sk_buff structure has become
quite overloaded with sharing). See block comment (or BZ1546179) for
more details.
* tapset/linux/ipmib.stp: Ditto.
* tapset/linux/netfilter.stp: Ditto.
* tapset/linux/tcp.stp: Ditto.
* tapset/linux/tcpmib.stp: Ditto.
* bpf-internal.h: Add MAX_BPF_STACK and BPF_REG_SIZE macros.
* bpf-opt.cxx (reg_alloc): Add support for spilling. Move various pieces
of code into seperate functions for improved readability (finalize_allocation,
merge, merge_copies, allocate).
(spill, choose_spill_reg): New functions for spilling.
(pref_sort_reg::cmp): Now imposes a strict weak ordering (prevents
undefined behavior when used with std::sort).
* bpf-translate.cxx (emit_store): Add calls to program::use_tmp_space.
* bpf-tests/reg_alloc2.stp: Increase number of spills and improve readability.
David Smith [Fri, 23 Feb 2018 21:46:58 +0000 (15:46 -0600)]
Add a minor tweak to testsuite/systemtap.stress/tapset_functions.exp.
* testsuite/systemtap.stress/tapset_functions.exp: Tweak the way stap is
started so that it is run the same both times. Otherwise, it can get a
different list of functions between the two invocations.
David Smith [Fri, 23 Feb 2018 21:39:03 +0000 (15:39 -0600)]
Add CentOS support to the http server.
* httpd/docker/centos.json: Add JSON config file for CentOS.
* util.cxx (get_distro_info): Handle a blank line in the /etc/os-release
file properly. Handle quoted strings properly.
* httpd/docker/fedora_install_package.py: Add CentOS support, by fixing
grabbing debuginfo for systems using yum.