#!/bin/bash # SPDX-License-Identifier: GPL-2.0 # # A cloned data section keeps its alignment. # # Plenty of kernel data is aligned for correctness rather than speed: per-CPU # variables, anything touched by an aligned vector move, structures padded to # own a cacheline. A clone that lands under-aligned either faults on first use # or silently shares a line it was laid out to avoid, and neither shows up # until the patch is loaded on hardware that cares. # # Fixed by 2f2600decb30 ("objtool/klp: Fix alignment of cloned data # sections"). # # Covers the same ground as corpus/x86_64/cloned-data-alignment in Joe # Lawrence's klp-build unit test corpus. . "$(dirname "$0")/../lib.sh" setup build_pair data_alignment.c # The premise: the compiler really did over-align it, and the object is new in # the patch so it has to be cloned rather than referenced. want="$(in_sections patched.o | sed 's/^ *\[[ 0-9]*\] *//' | awk '$1 == ".data.aligned_data" { print $NF }')" [ "$want" = 64 ] || probe_skip "compiler gave .data.aligned_data alignment '$want', not 64" has_input_section orig.o .data.aligned_data && fail "fixture put aligned_data in the original; nothing to clone" run_diff assert_section .data.aligned_data got="$(out_sections | sed 's/^ *\[[ 0-9]*\] *//' | awk '$1 == ".data.aligned_data" { print $NF }')" [ "$got" = "$want" ] || fail "cloned .data.aligned_data has alignment $got, expected $want" pass "cloned data section keeps its alignment"