[lld] r368964 - [ELF][PPC] Improve error message for unknown relocations

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 29 02:19:15 PDT 2019


Merged to release_90 in r370312.

On Thu, Aug 15, 2019 at 7:21 AM Fangrui Song via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: maskray
> Date: Wed Aug 14 22:22:23 2019
> New Revision: 368964
>
> URL: http://llvm.org/viewvc/llvm-project?rev=368964&view=rev
> Log:
> [ELF][PPC] Improve error message for unknown relocations
>
> Like rLLD354040.
>
> Previously, for unrecognized relocation types, in -no-pie mode:
>
>   foo.o: unrecognized reloc 256
>
> In -pie/-shared mode:
>
>   error: can't create dynamic relocation R_PPC_xxx against symbol: yyy in readonly segment
>
> Modified:
>     lld/trunk/ELF/Arch/PPC.cpp
>     lld/trunk/ELF/Arch/PPC64.cpp
>
> Modified: lld/trunk/ELF/Arch/PPC.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/PPC.cpp?rev=368964&r1=368963&r2=368964&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Arch/PPC.cpp (original)
> +++ lld/trunk/ELF/Arch/PPC.cpp Wed Aug 14 22:22:23 2019
> @@ -190,6 +190,13 @@ bool PPC::inBranchRange(RelType type, ui
>  RelExpr PPC::getRelExpr(RelType type, const Symbol &s,
>                          const uint8_t *loc) const {
>    switch (type) {
> +  case R_PPC_NONE:
> +    return R_NONE;
> +  case R_PPC_ADDR16_HA:
> +  case R_PPC_ADDR16_HI:
> +  case R_PPC_ADDR16_LO:
> +  case R_PPC_ADDR32:
> +    return R_ABS;
>    case R_PPC_DTPREL16:
>    case R_PPC_DTPREL16_HA:
>    case R_PPC_DTPREL16_HI:
> @@ -227,7 +234,9 @@ RelExpr PPC::getRelExpr(RelType type, co
>    case R_PPC_TPREL16_HI:
>      return R_TLS;
>    default:
> -    return R_ABS;
> +    error(getErrorLocation(loc) + "unknown relocation (" + Twine(type) +
> +          ") against symbol " + toString(s));
> +    return R_NONE;
>    }
>  }
>
> @@ -319,7 +328,7 @@ void PPC::relocateOne(uint8_t *loc, RelT
>      break;
>    }
>    default:
> -    error(getErrorLocation(loc) + "unrecognized relocation " + toString(type));
> +    llvm_unreachable("unknown relocation");
>    }
>  }
>
>
> Modified: lld/trunk/ELF/Arch/PPC64.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/PPC64.cpp?rev=368964&r1=368963&r2=368964&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Arch/PPC64.cpp (original)
> +++ lld/trunk/ELF/Arch/PPC64.cpp Wed Aug 14 22:22:23 2019
> @@ -536,6 +536,21 @@ void PPC64::relaxTlsIeToLe(uint8_t *loc,
>  RelExpr PPC64::getRelExpr(RelType type, const Symbol &s,
>                            const uint8_t *loc) const {
>    switch (type) {
> +  case R_PPC64_NONE:
> +    return R_NONE;
> +  case R_PPC64_ADDR16:
> +  case R_PPC64_ADDR16_DS:
> +  case R_PPC64_ADDR16_HA:
> +  case R_PPC64_ADDR16_HI:
> +  case R_PPC64_ADDR16_HIGHER:
> +  case R_PPC64_ADDR16_HIGHERA:
> +  case R_PPC64_ADDR16_HIGHEST:
> +  case R_PPC64_ADDR16_HIGHESTA:
> +  case R_PPC64_ADDR16_LO:
> +  case R_PPC64_ADDR16_LO_DS:
> +  case R_PPC64_ADDR32:
> +  case R_PPC64_ADDR64:
> +    return R_ABS;
>    case R_PPC64_GOT16:
>    case R_PPC64_GOT16_DS:
>    case R_PPC64_GOT16_HA:
> @@ -611,7 +626,9 @@ RelExpr PPC64::getRelExpr(RelType type,
>    case R_PPC64_TLS:
>      return R_TLSIE_HINT;
>    default:
> -    return R_ABS;
> +    error(getErrorLocation(loc) + "unknown relocation (" + Twine(type) +
> +          ") against symbol " + toString(s));
> +    return R_NONE;
>    }
>  }
>
> @@ -874,7 +891,7 @@ void PPC64::relocateOne(uint8_t *loc, Re
>      write64(loc, val - dynamicThreadPointerOffset);
>      break;
>    default:
> -    error(getErrorLocation(loc) + "unrecognized relocation " + toString(type));
> +    llvm_unreachable("unknown relocation");
>    }
>  }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list