This is an archive of the discontinued LLVM Phabricator instance.

Rewrite our relocation processing

Authored by espindola on Jan 5 2018, 8:55 AM.



This splits relocation processing in two steps.

First, analyze what needs to be done at the relocation spot. This can be a constant (non preemptible symbol, relative got reference, etc) or require a dynamic relocation. At this step we also consider creating copy relocations.

Once that is done we decide if we need a got or a plt entry.

The code is simpler IMHO. For example:

  • There is a single call to isPicRel since the logic is not split among adjustExpr and the caller.
  • R_MIPS_GOTREL is simple to handle now.
  • The tracking of what is preemptible or not is much simpler now.

This also fixes a regression with symbols being both in a got and copy relocated. They had regressed in r268668 and r268149.

The other test changes are because of error messages changes or the order of two relocations in the output.

I will benchmark and report.

Diff Detail