[lld] r298792 - Add comments and return early.

Sean Silva via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 25 22:21:51 PDT 2017


what does "non-interruptable" mean in this context? in the same segment?

On Mar 25, 2017 9:32 PM, "Rui Ueyama via llvm-commits" <
llvm-commits at lists.llvm.org> wrote:

> Author: ruiu
> Date: Sat Mar 25 22:20:30 2017
> New Revision: 298792
>
> URL: http://llvm.org/viewvc/llvm-project?rev=298792&view=rev
> Log:
> Add comments and return early.
>
> Modified:
>     lld/trunk/ELF/Relocations.cpp
>
> Modified: lld/trunk/ELF/Relocations.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/
> Relocations.cpp?rev=298792&r1=298791&r2=298792&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/Relocations.cpp (original)
> +++ lld/trunk/ELF/Relocations.cpp Sat Mar 25 22:20:30 2017
> @@ -312,6 +312,15 @@ static bool isRelExpr(RelExpr Expr) {
>                          R_PAGE_PC, R_RELAX_GOT_PC>(Expr);
>  }
>
> +// Returns true if a given relocation can be computed at link-time.
> +//
> +// For instance, we know the offset from a relocation to its target at
> +// link-time if the relocation is PC-relative and refers a
> +// (non-interruptible) function in the same executable. This function
> +// will return true for such relocation.
> +//
> +// If this function returns false, that means we need to emit a
> +// dynamic relocation so that the relocation will be fixed at load-time.
>  template <class ELFT>
>  static bool
>  isStaticLinkTimeConstant(RelExpr E, uint32_t Type, const SymbolBody
> &Body,
> @@ -331,16 +340,19 @@ isStaticLinkTimeConstant(RelExpr E, uint
>
>    if (isPreemptible(Body, Type))
>      return false;
> -
>    if (!Config->Pic)
>      return true;
>
> +  // For the target and the relocation, we want to know if they are
> +  // absolute or relative.
>    bool AbsVal = isAbsoluteValue<ELFT>(Body);
>    bool RelE = isRelExpr(E);
>    if (AbsVal && !RelE)
>      return true;
>    if (!AbsVal && RelE)
>      return true;
> +  if (!AbsVal && !RelE)
> +    return Target->usesOnlyLowPageBits(Type);
>
>    // Relative relocation to an absolute value. This is normally
> unrepresentable,
>    // but if the relocation refers to a weak undefined symbol, we allow it
> to
> @@ -350,16 +362,14 @@ isStaticLinkTimeConstant(RelExpr E, uint
>    // Another special case is MIPS _gp_disp symbol which represents offset
>    // between start of a function and '_gp' value and defined as absolute
> just
>    // to simplify the code.
> -  if (AbsVal && RelE) {
> -    if (Body.isUndefined() && !Body.isLocal() && Body.symbol()->isWeak())
> -      return true;
> -    error(S.getLocation<ELFT>(RelOff) + ": relocation " + toString(Type)
> +
> -          " cannot refer to absolute symbol '" + toString(Body) +
> -          "' defined in " + toString(Body.File));
> +  assert(AbsVal && RelE);
> +  if (Body.isUndefined() && !Body.isLocal() && Body.symbol()->isWeak())
>      return true;
> -  }
>
> -  return Target->usesOnlyLowPageBits(Type);
> +  error(S.getLocation<ELFT>(RelOff) + ": relocation " + toString(Type) +
> +        " cannot refer to absolute symbol '" + toString(Body) +
> +        "' defined in " + toString(Body.File));
> +  return true;
>  }
>
>  static RelExpr toPlt(RelExpr Expr) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170325/e6942837/attachment.html>


More information about the llvm-commits mailing list