)]}'
{
  "commit": "976f16630b1f7421d6693011333cf0f51417c498",
  "tree": "d364d4f02f24f64f63d7421370d8a7f4c4bd202e",
  "parents": [
    "b90e0b2f1b516ea32789ae3877830b518cb8ed60"
  ],
  "author": {
    "name": "Matthew Malcomson",
    "email": "hardenedapple@gmail.com",
    "time": "Tue Aug 02 12:10:01 2022 +0100"
  },
  "committer": {
    "name": "Matthew Malcomson",
    "email": "hardenedapple@gmail.com",
    "time": "Tue Aug 02 12:10:01 2022 +0100"
  },
  "message": "ld: aarch64: Adjust TLS relaxation condition\n\nIn aarch64_tls_transition_without_check and elfNN_aarch64_tls_relax we\nchoose whether to perform a relaxation to an IE access model or an LE\naccess model based on whether the symbol itself is marked as local (i.e.\n`h \u003d\u003d NULL`).\n\nThis is problematic in two ways.  The first is that sometimes a global\ndynamic access can be relaxed to an initial exec access when creating a\nshared library, and if that happens on a local symbol then we currently\nrelax it to a local exec access instead.  This usually does not happen\nsince we only relax an access if aarch64_can_relax_tls returns true and\naarch64_can_relax_tls does not have the same problem.  However, it can\nhappen when we have seen both an IE and GD access on the same symbol.\nThis case is exercised in the newly added testcase tls-relax-gd-ie-2.\n\nThe second problem is that deciding based on whether the symbol is local\nmisses the case when the symbol is global but is still non-interposable\nand known to be located in the executable.  This happens on all global\nsymbols in executables.\nThis case is exercised in the newly added testcase tls-relax-ie-le-4.\n\nHere we adjust the condition we base our relaxation on so that we relax\nto local-exec if we are creating an executable and the relevant symbol\nwe\u0027re accessing is stored inside that executable.\n\n-- Updating tests for new relaxation criteria\n\nMany of the tests added to check our relaxation to IE were implemented\nby taking advantage of the fact that we did not relax a global symbol\ndefined in an executable.\n\nSince a global symbol defined in an executable is still not\ninterposable, we know that a TLS version of such a symbol will be in the\nmain TLS block.  This means that we can perform a stronger relaxation on\nsuch symbols and relax their accesses to a local-exec access.\n\nHence we have to update all tests that relied on the older suboptimal\ndecision making.\n\nThe two cases when we still would want to relax a general dynamic access\nto an initial exec one are:\n1) When in a shared library and accessing a symbol which we have already\n   seen accessed with an initial exec access sequence.\n2) When in an executable and accessing a symbol defined in a shared\n   library.\n\nBoth of these require shared library support, which means that these\ntests are now only available on targets with that.\n\nI have chosen to switch the existing testcases from a plain executable\nto one dynamically linked to a shared object as that doesn\u0027t require\nchanging the testcases quite so much (just requires accessing a\ndifferent variable rather than requiring adding another code sequence).\n\nThe tls-relax-all testcase was an outlier to the above approach, since\nit included a general dynamic access to both a local and global symbol\nand inspected for the difference accordingly.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cf4db8492826c30829b44913f36091e038293fd0",
      "old_mode": 33188,
      "old_path": "bfd/elfnn-aarch64.c",
      "new_id": "ac48a175720d205224796bec6183d21573f0d727",
      "new_mode": 33188,
      "new_path": "bfd/elfnn-aarch64.c"
    },
    {
      "type": "modify",
      "old_id": "3c45f87151f82b2a3a5fcb10cea4b0cab534ab40",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/aarch64-elf.exp",
      "new_id": "337beadcbfe5d7ea54a7bba45017b10bb1604cb0",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/aarch64-elf.exp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d6732acdaf1543ffd51fe23d0da5633ecbe04d14",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-gd-symbolic.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d2ca5dac7be2aeab897d9e7b0d8ec30afc7cec19",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-gd-symbolic.s"
    },
    {
      "type": "modify",
      "old_id": "1cb4ef4261307c13139707ad27b8e85bbe11b0a9",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d",
      "new_id": "62faed4b73aac484119ed18dbc7f588f6ec8c794",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d"
    },
    {
      "type": "modify",
      "old_id": "59421864f9558050bf1d2ae1cab794bf54ac30df",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-all.d",
      "new_id": "1262a99a6a0debb22256903a25e9075f1666543b",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-all.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f0281b77579d2587062517be9513e7ad76d39a22",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "568ceb4857cf98e411ccee0d4b62898d1b3c3b22",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2e45ec90d1a853d58834b219bf9ff0fa6847db60",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d"
    },
    {
      "type": "modify",
      "old_id": "ab08c6161b9330110a9ffbb33eb6d44b0a8e8ac7",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d",
      "new_id": "340206a9e2bbd37534eb3a1fed79e6386480aed3",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d"
    },
    {
      "type": "modify",
      "old_id": "f80bb9077705d83e793fcdd6b45169ac82a24aa9",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie.d",
      "new_id": "0c03290e0a9cca61baab061e0b24475f9a8f00ab",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie.d"
    },
    {
      "type": "modify",
      "old_id": "88c7eec73e43afb680a6c1c9051bf5485491fa1e",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie.s",
      "new_id": "afe076c8c8203ee547e84ccab544b67e388279d3",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gd-ie.s"
    },
    {
      "type": "modify",
      "old_id": "2b8e346fc66c79c3d992714da7a876dc83c0b5ee",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d",
      "new_id": "f13263f201ff781b0c8c41f468c069ee71c4fd61",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d"
    },
    {
      "type": "modify",
      "old_id": "790b6c6eb8bb4b9c2efa0688f46a5413d8231f78",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s",
      "new_id": "f7be57c320716d6c56559d2ebfa181a2944bdb88",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s"
    },
    {
      "type": "modify",
      "old_id": "86277f82565c401aa6d2b4b365e2c9c8bc8ccfe6",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d",
      "new_id": "1ace84858a32e1ef0336cf24f7017a55ccbb611e",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d"
    },
    {
      "type": "modify",
      "old_id": "38b372132f49c926be8d6527bce9d203b794a4b5",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s",
      "new_id": "089d36c9cc8a9f4dd9f6cfe71996bdbdd9b68502",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e2bc5f1530440d19077c455db5783ef10da24bf2",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e151cd4efd6cc729d220ceea5f318ecd3a8ed3d8",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s"
    },
    {
      "type": "modify",
      "old_id": "21ad5e5a18c265e5e095b2053752a578d689d411",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d",
      "new_id": "cb546ad74e6da35e7d3cd4f56ba62af52afebc22",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d"
    },
    {
      "type": "modify",
      "old_id": "a4d1e00086ad3ed3818eb73b4aba606cb0de6cf7",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s",
      "new_id": "98dc2a571d5836b60f05cb9daf47b385456a3ee2",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s"
    },
    {
      "type": "modify",
      "old_id": "2b398dbb9c6ce48f48f258e3ed337dcd383af82c",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d",
      "new_id": "740178d46105483fa4176b1a4c77ebac459ef846",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d"
    },
    {
      "type": "modify",
      "old_id": "8e0310d6b3f8caecdbfc2bdd3f310b6ee3942d80",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s",
      "new_id": "d35aace776ee0bc327cfa1cf258c8ce687865d7a",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8838b9f23484ac6c0535c43256818050fbf3a4fd",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-sharedlib.s"
    },
    {
      "type": "modify",
      "old_id": "ebbaf854baa9548503d0eeac351ab3ee6e330183",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d",
      "new_id": "3dffa1b85e6376fd72970ba79ecf8d42640173ae",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d"
    },
    {
      "type": "modify",
      "old_id": "0088539d6bfae0bdfc70c86afeaf7f1d16305d12",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d",
      "new_id": "e759ae94576ccca484a9690d1334032f97df6fd6",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d"
    },
    {
      "type": "modify",
      "old_id": "520cd4e85b29f8c3acc912d2d31b902b91ee337e",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s",
      "new_id": "fcc970f6d8f46b7c57724b55c857dcee77bc0722",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s"
    },
    {
      "type": "modify",
      "old_id": "1ea61103b47ba1a23703be914da5f5f1008a9cb1",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d",
      "new_id": "6317152eb1ecc8830d8a0b736276c4ef19301d58",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d"
    },
    {
      "type": "modify",
      "old_id": "629d90c942d34845e700b935ef2701d06235b7dd",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d",
      "new_id": "66b996e6f4abc279d96be510956eff0c606ab240",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d"
    },
    {
      "type": "modify",
      "old_id": "4dc7e66bbdb7d7c01754aebcdaf4b1328667e143",
      "old_mode": 33188,
      "old_path": "ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s",
      "new_id": "3ae4a0cc9fe1329140c60ed9424b80e8b4669da3",
      "new_mode": 33188,
      "new_path": "ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s"
    }
  ]
}
