| 1 | |
| 2 | |
| 3 | * A switch dense enough that Clang builds a jump table for it, in a section of
|
| 4 | * its own: .rodata..Lswitch.table.<function>.
|
| 5 | *
|
| 6 | * The table belongs to the function and has to travel with it. It is named
|
| 7 | * after the function but is not part of it, so klp diff has to associate the
|
| 8 | * two rather than treating the table as unrelated data.
|
| 9 | *
|
| 10 | * The patch adds a case, which changes the table's contents and length.
|
| 11 |
|
| 12 |
|
| 13 | static const char __modinfo[]
|
| 14 | __attribute__((section(".modinfo"), used, aligned(1))) = "\0name=vmlinux";
|
| 15 | const char *status_to_string(unsigned int c)
|
| 16 | {
|
| 17 | switch (c) {
|
| 18 | case 0: return "idle";
|
| 19 | case 1: return "running";
|
| 20 | case 2: return "stopped";
|
| 21 | case 3: return "error";
|
| 22 | case 4: return "paused";
|
| 23 | case 5: return "waiting";
|
| 24 | case 6: return "starting";
|
| 25 | case 7: return "stopping";
|
| 26 | #ifdef PATCHED
|
| 27 | case 8: return "completed";
|
| 28 | #endif
|
| 29 | }
|
| 30 | return "unknown";
|
| 31 | }
|