@@ -535,6 +535,72 @@ static void test_distilled_base_vmlinux(void)
535
535
btf__free (vmlinux_btf );
536
536
}
537
537
538
+ /* Split and new base BTFs should inherit endianness from source BTF. */
539
+ static void test_distilled_endianness (void )
540
+ {
541
+ struct btf * base = NULL , * split = NULL , * new_base = NULL , * new_split = NULL ;
542
+ struct btf * new_base1 = NULL , * new_split1 = NULL ;
543
+ enum btf_endianness inverse_endianness ;
544
+ const void * raw_data ;
545
+ __u32 size ;
546
+
547
+ base = btf__new_empty ();
548
+ if (!ASSERT_OK_PTR (base , "empty_main_btf" ))
549
+ return ;
550
+ inverse_endianness = btf__endianness (base ) == BTF_LITTLE_ENDIAN ? BTF_BIG_ENDIAN
551
+ : BTF_LITTLE_ENDIAN ;
552
+ btf__set_endianness (base , inverse_endianness );
553
+ btf__add_int (base , "int" , 4 , BTF_INT_SIGNED ); /* [1] int */
554
+ VALIDATE_RAW_BTF (
555
+ base ,
556
+ "[1] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED" );
557
+ split = btf__new_empty_split (base );
558
+ if (!ASSERT_OK_PTR (split , "empty_split_btf" ))
559
+ goto cleanup ;
560
+ btf__add_ptr (split , 1 );
561
+ VALIDATE_RAW_BTF (
562
+ split ,
563
+ "[1] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED" ,
564
+ "[2] PTR '(anon)' type_id=1" );
565
+ if (!ASSERT_EQ (0 , btf__distill_base (split , & new_base , & new_split ),
566
+ "distilled_base" ) ||
567
+ !ASSERT_OK_PTR (new_base , "distilled_base" ) ||
568
+ !ASSERT_OK_PTR (new_split , "distilled_split" ) ||
569
+ !ASSERT_EQ (2 , btf__type_cnt (new_base ), "distilled_base_type_cnt" ))
570
+ goto cleanup ;
571
+ VALIDATE_RAW_BTF (
572
+ new_split ,
573
+ "[1] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED" ,
574
+ "[2] PTR '(anon)' type_id=1" );
575
+
576
+ raw_data = btf__raw_data (new_base , & size );
577
+ if (!ASSERT_OK_PTR (raw_data , "btf__raw_data #1" ))
578
+ goto cleanup ;
579
+ new_base1 = btf__new (raw_data , size );
580
+ if (!ASSERT_OK_PTR (new_base1 , "new_base1 = btf__new()" ))
581
+ goto cleanup ;
582
+ raw_data = btf__raw_data (new_split , & size );
583
+ if (!ASSERT_OK_PTR (raw_data , "btf__raw_data #2" ))
584
+ goto cleanup ;
585
+ new_split1 = btf__new_split (raw_data , size , new_base1 );
586
+ if (!ASSERT_OK_PTR (new_split1 , "new_split1 = btf__new()" ))
587
+ goto cleanup ;
588
+
589
+ ASSERT_EQ (btf__endianness (new_base1 ), inverse_endianness , "new_base1 endianness" );
590
+ ASSERT_EQ (btf__endianness (new_split1 ), inverse_endianness , "new_split1 endianness" );
591
+ VALIDATE_RAW_BTF (
592
+ new_split1 ,
593
+ "[1] INT 'int' size=4 bits_offset=0 nr_bits=32 encoding=SIGNED" ,
594
+ "[2] PTR '(anon)' type_id=1" );
595
+ cleanup :
596
+ btf__free (new_split1 );
597
+ btf__free (new_base1 );
598
+ btf__free (new_split );
599
+ btf__free (new_base );
600
+ btf__free (split );
601
+ btf__free (base );
602
+ }
603
+
538
604
void test_btf_distill (void )
539
605
{
540
606
if (test__start_subtest ("distilled_base" ))
@@ -549,4 +615,6 @@ void test_btf_distill(void)
549
615
test_distilled_base_multi_err2 ();
550
616
if (test__start_subtest ("distilled_base_vmlinux" ))
551
617
test_distilled_base_vmlinux ();
618
+ if (test__start_subtest ("distilled_endianness" ))
619
+ test_distilled_endianness ();
552
620
}
0 commit comments