[lld] r298792 - Add comments and return early.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 26 10:58:13 PDT 2017


On second thought, we probably should use "non-interposable" here, as both
non-interruptible functions and non-preemptible functions are a bit
confusing. (Both sound like they are low-level functions that mask
hardware/software interrupts.)

On Sun, Mar 26, 2017 at 9:32 AM, Rui Ueyama <ruiu at google.com> wrote:

> As Davide guessed, that means interposable or preemptible. I'll update the
> comment to use preemptible, as the term is used throughout this file.
>
> On Sat, Mar 25, 2017 at 11:16 PM, Davide Italiano <davide at freebsd.org>
> wrote:
>
>> On Sat, Mar 25, 2017 at 10:21 PM, Sean Silva via llvm-commits
>> <llvm-commits at lists.llvm.org> wrote:
>> > what does "non-interruptable" mean in this context? in the same segment?
>> >
>>
>> Unless I'm reading the context incorrectly, it's a synonym for not
>> preemptible at runtime.
>> In case my guess is right, I really dislike the word `interruptible`
>> because is such an overloaded word in systems.
>> I'd rather use `interposable` or `preemptible` (to the best of my
>> knowledge they're all synonyms in ELF, but please double
>> check/confirm).
>>
>> > 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/Relocation
>> s.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
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> >
>>
>> --
>> Davide
>>
>> "There are no solved problems; there are only problems that are more
>> or less solved" -- Henri Poincare
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170326/f625d74d/attachment.html>


More information about the llvm-commits mailing list