)]}'
{
  "commit": "aa9b7b91125056ddcc9f795767575a9125b64386",
  "tree": "f0e8a8c731c4d5584948b0f0db4042427f4750c1",
  "parents": [
    "373711ac978667c538395b6a55cef449995130db"
  ],
  "author": {
    "name": "Ard Biesheuvel",
    "email": "ardb@kernel.org",
    "time": "Thu Jan 15 15:20:44 2026 +0100"
  },
  "committer": {
    "name": "Ard Biesheuvel",
    "email": "ardb@kernel.org",
    "time": "Fri Jan 16 10:04:05 2026 +0100"
  },
  "message": "kallsyms: Get rid of kallsyms relative base\n\nWhen the kallsyms relative base was introduced, per-CPU variable\nreferences on x86_64 SMP were implemented as offsets into the respective\nper-CPU region, rather than offsets relative to the location of the\nvariable\u0027s template in the kernel image, which is how other\narchitectures implement it.\n\nThis required kallsyms to reason about the difference between the two,\nand the sign of the value in the kallsyms_offsets[] array was used to\ndistinguish them. This meant that negative offsets were not permitted\nfor ordinary variables, and so it was crucial that the relative base was\nchosen such that all offsets were positive numbers.\n\nThis is no longer needed: instead, the offsets can simply be encoded as\nvalues in the range -/+ 2 GiB, which is precisely what PC32 relocations\nprovide on most architectures. So it is possible to simplify the logic,\nand just use _text as the anchor directly, and let the linker calculate\nthe final value based on the location of the entry itself.\n\nSome toy architectures do not support place-relative relocations at all,\nbut these are all 32-bit, and on those architectures, there is no need\nfor place-relative relocations in the first place, and the actual symbol\nvalue can just be stored directly.\n\nThis makes all entries in the kallsyms_offsets[] array visible as\nplace-relative references in the ELF metadata, which will be important\nwhen implementing ELF-based fg-kaslr.\n\nSigned-off-by: Ard Biesheuvel \u003cardb@kernel.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "049e296f586ccdc6ada9bacd71d05f6681a537bb",
      "old_mode": 33188,
      "old_path": "kernel/kallsyms.c",
      "new_id": "6125724aadb1555ec180636ff4a89029ac0ede19",
      "new_mode": 33188,
      "new_path": "kernel/kallsyms.c"
    },
    {
      "type": "modify",
      "old_id": "9633782f8250090281a68c14605f3ab414e31f1e",
      "old_mode": 33188,
      "old_path": "kernel/kallsyms_internal.h",
      "new_id": "81a867dbe57d480e96e635e33a8adc53947f4b32",
      "new_mode": 33188,
      "new_path": "kernel/kallsyms_internal.h"
    },
    {
      "type": "modify",
      "old_id": "fe9bf8db1922e6a269e3d4034b238266751dcbcb",
      "old_mode": 33188,
      "old_path": "kernel/vmcore_info.c",
      "new_id": "f114719f6cb561b2d4b5bd5453e8e957aeb7ba0c",
      "new_mode": 33188,
      "new_path": "kernel/vmcore_info.c"
    },
    {
      "type": "modify",
      "old_id": "4b0234e4b12f3275491257f954f46ee6efacaab8",
      "old_mode": 33188,
      "old_path": "scripts/kallsyms.c",
      "new_id": "37d5c095ad22a5b6fa7e2fb37b4dc09781ff4917",
      "new_mode": 33188,
      "new_path": "scripts/kallsyms.c"
    },
    {
      "type": "modify",
      "old_id": "4ab44c73da4df43630a1b8ed58dc2a43a910243f",
      "old_mode": 33261,
      "old_path": "scripts/link-vmlinux.sh",
      "new_id": "73531cb63efcb362f34d8f1d1332e1b382992db2",
      "new_mode": 33261,
      "new_path": "scripts/link-vmlinux.sh"
    },
    {
      "type": "modify",
      "old_id": "74cdbd2ce9d0acbd420e10afd0886d33ae24ca09",
      "old_mode": 33188,
      "old_path": "tools/perf/tests/vmlinux-kallsyms.c",
      "new_id": "524d46478364d9dd9e2c4d8e59c1a66480595991",
      "new_mode": 33188,
      "new_path": "tools/perf/tests/vmlinux-kallsyms.c"
    }
  ]
}
