diff --git a/elf_reader_test.go b/elf_reader_test.go index 3cd8c3717..51ea6fe48 100644 --- a/elf_reader_test.go +++ b/elf_reader_test.go @@ -154,13 +154,10 @@ func TestLoadCollectionSpec(t *testing.T) { cmpopts.IgnoreFields(MapSpec{}, "Key", "Value"), cmpopts.IgnoreUnexported(ProgramSpec{}), cmpopts.IgnoreMapEntries(func(key string, _ *MapSpec) bool { - switch key { - case ".bss", ".data", ".rodata": + if key == ".bss" || key == ".data" || strings.HasPrefix(key, ".rodata") { return true - - default: - return false } + return false }), } @@ -177,9 +174,10 @@ func TestLoadCollectionSpec(t *testing.T) { } opts := defaultOpts - if have.Maps[".rodata"] != nil { + if have.Types != nil { err := have.RewriteConstants(map[string]interface{}{ - "arg": uint32(1), + "arg": uint32(1), + "arg2": uint32(2), }) if err != nil { t.Fatal("Can't rewrite constant:", err) @@ -223,7 +221,7 @@ func TestLoadCollectionSpec(t *testing.T) { t.Fatal("Can't run program:", err) } - if ret != 5 { + if ret != 7 { t.Error("Expected return value to be 5, got", ret) } }) diff --git a/testdata/loader-clang-14-eb.elf b/testdata/loader-clang-14-eb.elf index 2c9a8802d..75bd62b69 100644 Binary files a/testdata/loader-clang-14-eb.elf and b/testdata/loader-clang-14-eb.elf differ diff --git a/testdata/loader-clang-14-el.elf b/testdata/loader-clang-14-el.elf index b7abd3cdd..275c7a995 100644 Binary files a/testdata/loader-clang-14-el.elf and b/testdata/loader-clang-14-el.elf differ diff --git a/testdata/loader-clang-7-eb.elf b/testdata/loader-clang-7-eb.elf index aaf8f7438..d13d12115 100644 Binary files a/testdata/loader-clang-7-eb.elf and b/testdata/loader-clang-7-eb.elf differ diff --git a/testdata/loader-clang-7-el.elf b/testdata/loader-clang-7-el.elf index 6c21e997c..39643eb8a 100644 Binary files a/testdata/loader-clang-7-el.elf and b/testdata/loader-clang-7-el.elf differ diff --git a/testdata/loader-clang-9-eb.elf b/testdata/loader-clang-9-eb.elf index c5acb1601..e58956f50 100644 Binary files a/testdata/loader-clang-9-eb.elf and b/testdata/loader-clang-9-eb.elf differ diff --git a/testdata/loader-clang-9-el.elf b/testdata/loader-clang-9-el.elf index 91601b5df..a13658aae 100644 Binary files a/testdata/loader-clang-9-el.elf and b/testdata/loader-clang-9-el.elf differ diff --git a/testdata/loader.c b/testdata/loader.c index b30eeec52..764911e96 100644 --- a/testdata/loader.c +++ b/testdata/loader.c @@ -112,7 +112,9 @@ int __attribute__((noinline)) global_fn(uint32_t arg) { static volatile unsigned int key1 = 0; // .bss static volatile unsigned int key2 = 1; // .data volatile const unsigned int key3 = 2; // .rodata -static volatile const uint32_t arg; // .rodata, rewritten by loader +static volatile const uint32_t arg; // .rodata, populated by loader +// custom .rodata section, populated by loader +static volatile const uint32_t arg2 __section(".rodata.test"); #endif __section("xdp") int xdp_prog() { @@ -121,11 +123,12 @@ __section("xdp") int xdp_prog() { unsigned int key2 = 1; unsigned int key3 = 2; uint32_t arg = 1; + uint32_t arg2 = 2; #endif map_lookup_elem(&hash_map, (void *)&key1); map_lookup_elem(&hash_map2, (void *)&key2); map_lookup_elem(&hash_map2, (void *)&key3); - return static_fn(arg) + global_fn(arg); + return static_fn(arg) + global_fn(arg) + arg2; } // This function has no relocations, and is thus parsed differently.