From c51252fb9b550d8e1398886620a2ffb3dab2c24e Mon Sep 17 00:00:00 2001 From: Philip Craig Date: Thu, 3 Oct 2024 14:34:10 +1000 Subject: [PATCH] dwarf: function with multiple ranges (#17) foo is split into foo and foo.cold, and thus has multiple symbols and multiple address ranges. --- dwarf/cold | Bin 0 -> 19232 bytes dwarf/cold.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ dwarf/cold.sh | 4 ++++ 3 files changed, 44 insertions(+) create mode 100755 dwarf/cold create mode 100644 dwarf/cold.cpp create mode 100644 dwarf/cold.sh diff --git a/dwarf/cold b/dwarf/cold new file mode 100755 index 0000000000000000000000000000000000000000..d03b004aa98c5caab6a913a356c89576b0b04a3e GIT binary patch literal 19232 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 IK;tq101T7D?EnA( literal 0 HcmV?d00001 diff --git a/dwarf/cold.cpp b/dwarf/cold.cpp new file mode 100644 index 0000000..1b43f63 --- /dev/null +++ b/dwarf/cold.cpp @@ -0,0 +1,40 @@ +/* Based on gcc/gcc/testsuite/gcc.dg/tree-prof/cold_partition_label.c */ +/* foo is split into foo and foo.cold. bar is inlined in both cases. */ + +#define MAXITER 10000 +#define SIZE 10000 + +const char *sarr[SIZE]; +const char *buf_hot; +const char *buf_cold; + +struct Foo +{ + int a; + void foo(int path); + void bar(const char *s); +}; + +void Foo::bar(const char *s) { + int i; + for (i = 0; i < SIZE; i++) + sarr[i] = s; +} + +__attribute__((noinline)) +void Foo::foo(int path) { + if (path) + bar(buf_hot); + else + bar(buf_cold); +} + +int main(int argc, char *argv[]) { + Foo foo = {}; + int i; + buf_hot = "hello"; + buf_cold = "world"; + for (i = 0; i < MAXITER; i++) + foo.foo(argc); + return 0; +} diff --git a/dwarf/cold.sh b/dwarf/cold.sh new file mode 100644 index 0000000..d543b64 --- /dev/null +++ b/dwarf/cold.sh @@ -0,0 +1,4 @@ +CFLAGS="-fdebug-prefix-map=`pwd`=/object/testfiles/dwarf -O3" +g++-13 $CFLAGS cold.cpp -o cold -fprofile-generate +./cold +g++-13 $CFLAGS cold.cpp -o cold -fprofile-use -g