[lld] r202289 - [Mips] Split reloc26 function into two parts - for processing local and
Hal Finkel
hfinkel at anl.gov
Wed Feb 26 11:26:07 PST 2014
----- Original Message -----
> From: "Simon Atanasyan" <simon at atanasyan.com>
> To: llvm-commits at cs.uiuc.edu
> Sent: Wednesday, February 26, 2014 1:17:20 PM
> Subject: [lld] r202289 - [Mips] Split reloc26 function into two parts - for processing local and
>
> Author: atanasyan
> Date: Wed Feb 26 13:17:20 2014
> New Revision: 202289
>
> URL: http://llvm.org/viewvc/llvm-project?rev=202289&view=rev
> Log:
> [Mips] Split reloc26 function into two parts - for processing local
> and
> external relocations.
>
> Modified:
> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp
>
> Modified:
> lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp?rev=202289&r1=202288&r2=202289&view=diff
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp
> (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp Wed
> Feb 26 13:17:20 2014
> @@ -46,12 +46,16 @@ void reloc32(uint8_t *location, uint64_t
>
> /// \brief R_MIPS_26
> /// local : ((A | ((P + 4) & 0x3F000000)) + S) >> 2
> +void reloc26loc(uint8_t *location, uint64_t P, uint64_t S, int32_t
> A) {
> + uint32_t result = ((A << 2) | ((P + 4) & 0x3f000000)) + S;
> + applyReloc(location, result >> 2, 0x03ffffff);
> +}
> +
> +/// \brief LLD_R_MIPS_GLOBAL_26
> /// external: (signâextend(A) + S) >> 2
Non-ASCII characters in the comment above?
-Hal
> -void reloc26(uint8_t *location, uint64_t P, uint64_t S, bool
> isLocal) {
> - int32_t A = (*(uint32_t*)location & 0x03FFFFFFU) << 2;
> - uint32_t result = isLocal ? (A | ((P + 4) & 0x3F000000)) :
> signExtend<28>(A);
> - result = (result + S) >> 2;
> - applyReloc(location, result, 0x03ffffff);
> +void reloc26ext(uint8_t *location, uint64_t S, int32_t A) {
> + uint32_t result = signExtend<28>(A << 2) + S;
> + applyReloc(location, result >> 2, 0x03ffffff);
> }
>
> /// \brief R_MIPS_HI16
> @@ -183,7 +187,7 @@ error_code MipsTargetRelocationHandler::
> reloc32(location, relocVAddress, targetVAddress, ref.addend());
> break;
> case R_MIPS_26:
> - reloc26(location, relocVAddress, targetVAddress, true);
> + reloc26loc(location, relocVAddress, targetVAddress,
> ref.addend());
> break;
> case R_MIPS_HI16:
> savePairedRelocation(atom, ref);
> @@ -212,7 +216,7 @@ error_code MipsTargetRelocationHandler::
> relocGOT16(location, relocVAddress, targetVAddress,
> ref.addend(), gpAddr);
> break;
> case LLD_R_MIPS_GLOBAL_26:
> - reloc26(location, relocVAddress, targetVAddress, false);
> + reloc26ext(location, targetVAddress, ref.addend());
> break;
> case LLD_R_MIPS_HI16:
> relocLldHi16(location, targetVAddress);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-commits
mailing list