#!/bin/bash
#
# Copyright (C) 2008 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Test with full DWARF debugging information.
# Check full signatures of methods.
${RUN} "$@" -Xcompiler-option --generate-debug-info \
  --args --test-local --args --test-remote
return_status1=$?

# The option jitthreshold:0 ensures that if we run the test in JIT mode,
# there will be JITed frames on the callstack (it synchronously JITs on first use).
${RUN} "$@" -Xcompiler-option --generate-debug-info \
  --runtime-option -Xjitthreshold:0 \
  --args --test-local --args --test-remote
return_status2=$?

# Test with minimal compressed debugging information.
# Check only method names (parameters are omitted to save space).
# Check only remote unwinding since decompression is disabled in local unwinds (b/27391690).
${RUN} "$@" -Xcompiler-option --generate-mini-debug-info \
  --runtime-option -Xjitthreshold:0 \
  --args --test-remote
return_status3=$?

# Make sure we don't silently ignore an early failure.
(exit $return_status1) && (exit $return_status2) && (exit $return_status3)
