)]}'
{
  "commit": "249757bae2b45c845feddee2ba9f794a54d8ea14",
  "tree": "5e727eef8f9a29cbf52516b119c407cbfb7cb3a8",
  "parents": [
    "80e40f01c83850d8d5f9753ed165bab310f9c865"
  ],
  "author": {
    "name": "Ryan Prichard",
    "email": "rprichard@google.com",
    "time": "Fri Nov 01 17:18:28 2019 -0700"
  },
  "committer": {
    "name": "Ryan Prichard",
    "email": "rprichard@google.com",
    "time": "Tue Nov 05 13:37:51 2019 -0800"
  },
  "message": "Use ifuncs in the linker\n\nUsing ifuncs allows the linker to select faster versions of libc functions\nlike strcmp, making linking faster.\n\nThe linker continues to first initialize TLS, then call the ifunc\nresolvers. There are small amounts of code in Bionic that need to avoid\ncalling functions selected using ifuncs (generally string.h APIs). I\u0027ve\ntried to compile those pieces with -ffreestanding. Maybe it\u0027s unnecessary,\nbut maybe it could help avoid compiler-inserted memset calls, and maybe\nit will be useful later on.\n\nThe ifuncs are called in a special early pass using special\n__rel[a]_iplt_start / __rel[a]_iplt_end symbols. The linker will encounter\nthe ifuncs again as R_*_IRELATIVE dynamic relocations, so they\u0027re skipped\non the second pass.\n\nBreak linker_main.cpp into its own liblinker_main library so it can be\ncompiled with -ffreestanding.\n\nOn walleye, this change fixes a recent 2.3% linker64 start-up time\nregression (156.6ms -\u003e 160.2ms), but it also helps the 32-bit time by\nabout 1.9% on the same benchmark. I\u0027m measuring the run-time using a\nsynthetic benchmark based on loading libandroid_servers.so.\n\nTest: bionic unit tests, manual benchmarking\nBug: none\nMerged-In: Ieb9446c2df13a66fc0d377596756becad0af6995\nChange-Id: Ieb9446c2df13a66fc0d377596756becad0af6995\n(cherry picked from commit 772bcbb0c2f7a87b18021849528240ef0c617d94)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "53a26a64a7a6a59e580715ea340ee52c4f5d4395",
      "old_mode": 33188,
      "old_path": "libc/Android.bp",
      "new_id": "c5ea4c5228481cb9cc0e43513a8bcd680faaad6c",
      "new_mode": 33188,
      "new_path": "libc/Android.bp"
    },
    {
      "type": "modify",
      "old_id": "6e1b0de2527006bd1faa58cf98f2729ceacf5f10",
      "old_mode": 33188,
      "old_path": "libc/bionic/__libc_init_main_thread.cpp",
      "new_id": "94cf1f8e3752ac046b22463aa9090e8e52333c3c",
      "new_mode": 33188,
      "new_path": "libc/bionic/__libc_init_main_thread.cpp"
    },
    {
      "type": "modify",
      "old_id": "85228359e56baf6a0d566fd9d90079fbe37fb17f",
      "old_mode": 33188,
      "old_path": "libc/bionic/bionic_call_ifunc_resolver.cpp",
      "new_id": "437de78ce4a5a87888cef4188c89ea1b78500621",
      "new_mode": 33188,
      "new_path": "libc/bionic/bionic_call_ifunc_resolver.cpp"
    },
    {
      "type": "modify",
      "old_id": "c8f867b644e41c4a2a538e35749d8054257b22e0",
      "old_mode": 33188,
      "old_path": "libc/bionic/getauxval.cpp",
      "new_id": "f865f97b46d60220081f6b44ffa08851abb6ee00",
      "new_mode": 33188,
      "new_path": "libc/bionic/getauxval.cpp"
    },
    {
      "type": "modify",
      "old_id": "0b740232a30a1f7432b3bd0a2ebddd2e3a56a9f6",
      "old_mode": 33188,
      "old_path": "libc/bionic/libc_init_static.cpp",
      "new_id": "28c0b0c9598680d9170e9d2d13bc9f3bf9acccf0",
      "new_mode": 33188,
      "new_path": "libc/bionic/libc_init_static.cpp"
    },
    {
      "type": "modify",
      "old_id": "1dc10667b4d1c2995db12af4fb610d3b09806f97",
      "old_mode": 33188,
      "old_path": "libc/bionic/pthread_create.cpp",
      "new_id": "03af2d94afd50407a23c5e724bd973a2315ea84c",
      "new_mode": 33188,
      "new_path": "libc/bionic/pthread_create.cpp"
    },
    {
      "type": "modify",
      "old_id": "8061f401ddce8fbce31f4762de60ca3bb7326fbf",
      "old_mode": 33188,
      "old_path": "linker/Android.bp",
      "new_id": "1800bdb2a894758bea18dda0a8e2b6640cbaaad2",
      "new_mode": 33188,
      "new_path": "linker/Android.bp"
    },
    {
      "type": "modify",
      "old_id": "eedce7029eb311133acb37d7be7470dd1b84adff",
      "old_mode": 33188,
      "old_path": "linker/linker.cpp",
      "new_id": "1393eb521e67d4e25184833d7dad25d4b09110fb",
      "new_mode": 33188,
      "new_path": "linker/linker.cpp"
    },
    {
      "type": "modify",
      "old_id": "3b950a34ce30b3982ffaf6229d9f5130c55ddcfa",
      "old_mode": 33188,
      "old_path": "linker/linker_main.cpp",
      "new_id": "264923f1d465fb0f102819d7e44561a0c00a670f",
      "new_mode": 33188,
      "new_path": "linker/linker_main.cpp"
    }
  ]
}
