cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

btf_dump_test_case_padding.c (1775B)


      1// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
      2
      3/*
      4 * BTF-to-C dumper tests for implicit and explicit padding between fields and
      5 * at the end of a struct.
      6 *
      7 * Copyright (c) 2019 Facebook
      8 */
      9/* ----- START-EXPECTED-OUTPUT ----- */
     10struct padded_implicitly {
     11	int a;
     12	long b;
     13	char c;
     14};
     15
     16/* ------ END-EXPECTED-OUTPUT ------ */
     17
     18/* ----- START-EXPECTED-OUTPUT ----- */
     19/*
     20 *struct padded_explicitly {
     21 *	int a;
     22 *	int: 32;
     23 *	int b;
     24 *};
     25 *
     26 */
     27/* ------ END-EXPECTED-OUTPUT ------ */
     28
     29struct padded_explicitly {
     30	int a;
     31	int: 1; /* algo will explicitly pad with full 32 bits here */
     32	int b;
     33};
     34
     35/* ----- START-EXPECTED-OUTPUT ----- */
     36/*
     37 *struct padded_a_lot {
     38 *	int a;
     39 *	long: 32;
     40 *	long: 64;
     41 *	long: 64;
     42 *	int b;
     43 *};
     44 *
     45 */
     46/* ------ END-EXPECTED-OUTPUT ------ */
     47
     48struct padded_a_lot {
     49	int a;
     50	/* 32 bit of implicit padding here, which algo will make explicit */
     51	long: 64;
     52	long: 64;
     53	int b;
     54};
     55
     56/* ----- START-EXPECTED-OUTPUT ----- */
     57/*
     58 *struct padded_cache_line {
     59 *	int a;
     60 *	long: 32;
     61 *	long: 64;
     62 *	long: 64;
     63 *	long: 64;
     64 *	int b;
     65 *	long: 32;
     66 *	long: 64;
     67 *	long: 64;
     68 *	long: 64;
     69 *};
     70 *
     71 */
     72/* ------ END-EXPECTED-OUTPUT ------ */
     73
     74struct padded_cache_line {
     75	int a;
     76	int b __attribute__((aligned(32)));
     77};
     78
     79/* ----- START-EXPECTED-OUTPUT ----- */
     80/*
     81 *struct zone_padding {
     82 *	char x[0];
     83 *};
     84 *
     85 *struct zone {
     86 *	int a;
     87 *	short b;
     88 *	short: 16;
     89 *	struct zone_padding __pad__;
     90 *};
     91 *
     92 */
     93/* ------ END-EXPECTED-OUTPUT ------ */
     94
     95struct zone_padding {
     96	char x[0];
     97} __attribute__((__aligned__(8)));
     98
     99struct zone {
    100	int a;
    101	short b;
    102	struct zone_padding __pad__;
    103};
    104
    105int f(struct {
    106	struct padded_implicitly _1;
    107	struct padded_explicitly _2;
    108	struct padded_a_lot _3;
    109	struct padded_cache_line _4;
    110	struct zone _5;
    111} *_)
    112{
    113	return 0;
    114}