llvm-project/llvm/lib/MC
Jack Carter 8ad0c272af The ELF relocation record format is different for N64
which many Mips 64 ABIs use than for O64 which many 
if not all other target ABIs use.

Most architectures have the following 64 bit relocation record format:

  typedef struct
  {
    Elf64_Addr   r_offset; /* Address of reference */
    Elf64_Xword  r_info;   /* Symbol index and type of relocation */
  } Elf64_Rel;

  typedef struct
  {
    Elf64_Addr    r_offset;
    Elf64_Xword   r_info;
    Elf64_Sxword  r_addend;
  } Elf64_Rela;

Whereas N64 has the following format:

  typedef struct
  {
    Elf64_Addr    r_offset;/* Address of reference */
    Elf64_Word  r_sym;     /* Symbol index */
    Elf64_Byte  r_ssym;    /* Special symbol */
    Elf64_Byte  r_type3;   /* Relocation type */
    Elf64_Byte  r_type2;   /* Relocation type */
    Elf64_Byte  r_type;    /* Relocation type */
  } Elf64_Rel;

  typedef struct
  {
    Elf64_Addr    r_offset;/* Address of reference */
    Elf64_Word  r_sym;     /* Symbol index */
    Elf64_Byte  r_ssym;    /* Special symbol */
    Elf64_Byte  r_type3;   /* Relocation type */
    Elf64_Byte  r_type2;   /* Relocation type */
    Elf64_Byte  r_type;    /* Relocation type */
    Elf64_Sxword  r_addend;
  } Elf64_Rela;

The structure is the same size, but the r_info data element 
is now 5 separate elements. Besides the content aspects, 
endian byte reordering will be different for the area with 
each element being endianized separately.

I treat this as generic and continue to pass r_type as 
an integer masking and unmasking the byte sized N64 
values for N64 mode. I've implemented this and it causes no 
affect on other current targets.

This passes make check.

Jack

llvm-svn: 159299
2012-06-27 22:28:30 +00:00
..
MCDisassembler Add accessors for all private members of DisasmContext. 2012-06-06 20:45:10 +00:00
MCParser Implement irpc. Extracted from a patch by the PaX team. I just added the test. 2012-06-16 18:03:25 +00:00
CMakeLists.txt Remove the logging streamer. 2012-01-10 00:40:39 +00:00
ELFObjectWriter.cpp The ELF relocation record format is different for N64 2012-06-27 22:28:30 +00:00
LLVMBuild.txt LLVMBuild: Introduce a common section which currently has a list of the 2011-12-12 22:45:54 +00:00
MCAsmBackend.cpp Tidy up. Trailing whitespace. 2012-05-11 01:41:30 +00:00
MCAsmInfo.cpp Remove another duplicated variable. We only need one to tell us if the linker 2012-06-22 13:32:49 +00:00
MCAsmInfoCOFF.cpp Refactor data-in-code annotations. 2012-05-18 19:12:01 +00:00
MCAsmInfoDarwin.cpp Remove another duplicated variable. We only need one to tell us if the linker 2012-06-22 13:32:49 +00:00
MCAsmStreamer.cpp EmitZerofill should take a 64-bit size or else it's chopping off large zero-filled global. rdar://11729134 2012-06-22 20:14:46 +00:00
MCAssembler.cpp Prune some includes and forward declarations. 2012-03-26 06:58:25 +00:00
MCAtom.cpp MCAtom extending methods need to extend the range of the atom as well. 2011-10-10 18:09:38 +00:00
MCCodeEmitter.cpp MC: Move target specific fixup info descriptors to TargetAsmBackend instead of 2010-12-16 03:20:06 +00:00
MCCodeGenInfo.cpp Sink codegen optimization level into MCCodeGenInfo along side relocation model 2011-11-16 08:38:26 +00:00
MCContext.cpp Add simple support for keeping MCFixup source information. 2012-01-26 23:20:11 +00:00
MCDisassembler.cpp
MCDwarf.cpp Fix a FIXME: DwarfRequiresRelocationForSectionOffset is the same as 2012-06-22 13:24:07 +00:00
MCELF.cpp Add support for gnu_indirect_function. 2011-12-12 17:34:04 +00:00
MCELF.h Make all static functions become static class methods. Move shared (duplicated) functions to new MCELF class. 2011-02-28 21:45:04 +00:00
MCELFObjectTargetWriter.cpp The ELF relocation record format is different for N64 2012-06-27 22:28:30 +00:00
MCELFStreamer.cpp EmitZerofill should take a 64-bit size or else it's chopping off large zero-filled global. rdar://11729134 2012-06-22 20:14:46 +00:00
MCExpr.cpp Implement local-exec TLS on PowerPC. 2012-06-04 17:36:38 +00:00
MCInst.cpp Add a dump() implementation for sub-instruction MCOperands. 2012-01-19 19:32:20 +00:00
MCInstPrinter.cpp Move getOpcodeName from the various target InstPrinters into the superclass MCInstPrinter. 2012-04-02 08:32:38 +00:00
MCInstrAnalysis.cpp MCInstrAnalysis: Don't crash on instructions with no operands. 2011-09-19 17:56:00 +00:00
MCLabel.cpp
MCMachOStreamer.cpp EmitZerofill should take a 64-bit size or else it's chopping off large zero-filled global. rdar://11729134 2012-06-22 20:14:46 +00:00
MCMachObjectTargetWriter.cpp MC/Mach-O: On second thought, use a custom hook for enabling aggressive 2010-12-17 05:50:29 +00:00
MCModule.cpp Tidy up. 80 columns. 2011-11-15 16:46:22 +00:00
MCNullStreamer.cpp EmitZerofill should take a 64-bit size or else it's chopping off large zero-filled global. rdar://11729134 2012-06-22 20:14:46 +00:00
MCObjectFileInfo.cpp Tidy up. Trailing whitespace. 2012-05-11 01:41:30 +00:00
MCObjectStreamer.cpp Prune some includes and forward declarations. 2012-03-26 06:58:25 +00:00
MCObjectWriter.cpp Fixed a crash in llvm-mc for Mach-O when a symbol difference expression uses a 2012-01-31 23:02:57 +00:00
MCPureStreamer.cpp EmitZerofill should take a 64-bit size or else it's chopping off large zero-filled global. rdar://11729134 2012-06-22 20:14:46 +00:00
MCSection.cpp
MCSectionCOFF.cpp Tidy up. Trailing whitespace. 2012-05-11 01:41:30 +00:00
MCSectionELF.cpp Tidy up. Trailing whitespace. 2012-05-11 01:41:30 +00:00
MCSectionMachO.cpp Reapply 127939 since Daniel fixed the breakage. <rdar://problem/9012638> 2011-03-19 02:42:31 +00:00
MCStreamer.cpp Refactor data-in-code annotations. 2012-05-18 19:12:01 +00:00
MCSubtargetInfo.cpp misched: Added MultiIssueItineraries. 2012-06-05 03:44:40 +00:00
MCSymbol.cpp Tidy up. Trailing whitespace. 2012-05-11 01:41:30 +00:00
MCTargetAsmLexer.cpp Rename TargetAsmParser to MCTargetAsmParser and TargetAsmLexer to MCTargetAsmLexer; rename createAsmLexer to createMCAsmLexer and createAsmParser to createMCAsmParser. 2011-07-26 00:24:13 +00:00
MCValue.cpp
MCWin64EH.cpp Add MCObjectFileInfo and sink the MCSections initialization code from 2011-07-20 05:58:47 +00:00
MachObjectWriter.cpp Refactor data-in-code annotations. 2012-05-18 19:12:01 +00:00
Makefile start straightening out libedis's dependencies and make it fit 2010-07-20 18:25:19 +00:00
SubtargetFeature.cpp Tidy up. Trailing whitespace. 2012-05-11 01:41:30 +00:00
WinCOFFObjectWriter.cpp Implement relocation-overflow behavior for PE/COFF. 2012-03-15 09:03:03 +00:00
WinCOFFStreamer.cpp EmitZerofill should take a 64-bit size or else it's chopping off large zero-filled global. rdar://11729134 2012-06-22 20:14:46 +00:00