)]}'
{
  "log": [
    {
      "commit": "de30635eb67282b37454dc0d3f67507feb172967",
      "tree": "8c9d46b1b7c0c245c33efb14ed919dfec88baae8",
      "parents": [
        "10c2875934c9f47b39c1ffd9a3ecbe63d59f3183"
      ],
      "author": {
        "name": "Matthew Maurer",
        "email": "mmaurer@google.com",
        "time": "Fri Oct 23 09:55:33 2020 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Mon Nov 02 17:28:41 2020 -0800"
      },
      "message": "Put __*_ARRAY__ symbols before prioritized init/fini funcs\n\nA constructor or destructor function with an integral priority is\nplaced in an .init_array or .fini_array section with the priority\nsuffixed to the section name:\n - __attribute__((constructor)) \u003d\u003d\u003e .init_array\n - __attribute__((constructor(42))) \u003d\u003d\u003e .init_array.42\n\nThe suffixed init/fini sections appear before the unsuffixed sections,\nso the prioritized functions appeared before the __{INIT,FINI}_ARRAY__\nsymbols and were dropped when the symbols were used.\n\nThe (static) linker doesn\u0027t recognize priority suffixes on\n.preinit_array.\n\nThis bug affected .init_array and .fini_array for static executables.\nFor dynamic executables, only .fini_array was affected, because\n.init_array is handled by the dynamic loader instead, which uses\nDT_INIT_ARRAY[SZ]. For DSOs, neither is affected, because the two\nsections are only handled by the dynamic loader.\n\nThis patch also fixes a minor inconsistency where dynamic init/preinit\nwere passed argc/argv/envp, but static were not.\n\nBug: http://b/170983066\nTest: bionic-unit-tests\nChange-Id: I0fffa776e5d9bdb6f8af06b4c1af148236742fef\n"
    }
  ]
}
