Skip to content

Commit

Permalink
fix(release): ensure debuginfo file contains debugging info
Browse files Browse the repository at this point in the history
Seems recently Cargo defaulted to use `strip=debuginfo`. This
inadvertently made our debuginfo files much smaller

Fix the issue by using `strip=none` and add a test so that it breaks if
this somehow changes again.

Signed-off-by: Pablo Barbáchano <[email protected]>
  • Loading branch information
pb8o committed Sep 17, 2024
1 parent 0661dd7 commit 24819a0
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 22 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ and this project adheres to
Vsock not notifying guest about `TRANSPORT_RESET_EVENT` event after snapshot
restore. This resulted in guest waiting indefinitely on a connection which was
reset during snapshot creation.
- [#4790](https://github.com/firecracker-microvm/firecracker/pull/4790): v1.9.0
was missing most of the debugging information in the debuginfo file, due to a
change in the Cargo defaults. This has been corrected.

## \[1.9.0\]

Expand Down
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ panic = "abort"
[profile.release]
panic = "abort"
lto = true
strip = "none"

[profile.bench]
strip = "debuginfo"
48 changes: 48 additions & 0 deletions tests/integration_tests/functional/test_binary.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0

"""Tests to check several aspects of the binaries"""

import re
import subprocess

import pytest

from framework import utils


@pytest.mark.timeout(500)
def test_firecracker_binary_static_linking(microvm_factory):
"""
Test to make sure the firecracker binary is statically linked.
"""
fc_binary_path = microvm_factory.fc_binary_path
_, stdout, stderr = utils.check_output(f"file {fc_binary_path}")
assert "" in stderr
# expected "statically linked" for aarch64 and
# "static-pie linked" for x86_64
assert "statically linked" in stdout or "static-pie linked" in stdout


def test_release_debuginfo(microvm_factory):
"""Ensure the debuginfo file has the right ELF sections"""
fc_binary = microvm_factory.fc_binary_path
debuginfo = fc_binary.with_suffix(".debug")
stdout = subprocess.check_output(
["readelf", "-S", str(debuginfo)],
encoding="ascii",
)
matches = {
match[0] for match in re.findall(r"\[..] (\.(\w|\.)+)", stdout, re.MULTILINE)
}
needed_sections = {
".debug_aranges",
".debug_info",
".debug_abbrev",
".debug_line",
".debug_frame",
".debug_str",
".debug_ranges",
}
missing_sections = needed_sections - matches
assert missing_sections == set()
22 changes: 0 additions & 22 deletions tests/integration_tests/functional/test_binary_static_linking.py

This file was deleted.

0 comments on commit 24819a0

Please sign in to comment.