forked from OSchip/llvm-project
				
			[elf2] Add 32S and 64 relocations (needed for musl).
It wasn't obvious what the assembly was to generate these relocations, so I did the test with yaml. llvm-svn: 246902
This commit is contained in:
		
							parent
							
								
									baae538cc6
								
							
						
					
					
						commit
						1b3fffa6e0
					
				| 
						 | 
					@ -271,8 +271,12 @@ template <class ELFT> void OutputSection<ELFT>::writeTo(uint8_t *Buf) {
 | 
				
			||||||
                                     SymVA + (RI.r_addend - (P + Offset)));
 | 
					                                     SymVA + (RI.r_addend - (P + Offset)));
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case llvm::ELF::R_X86_64_32:
 | 
					        case llvm::ELF::R_X86_64_32:
 | 
				
			||||||
 | 
					        case llvm::ELF::R_X86_64_32S:
 | 
				
			||||||
          support::endian::write32le(Location, SymVA + RI.r_addend);
 | 
					          support::endian::write32le(Location, SymVA + RI.r_addend);
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
 | 
					        case llvm::ELF::R_X86_64_64:
 | 
				
			||||||
 | 
					          support::endian::write64le(Location, SymVA + RI.r_addend);
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
          llvm::errs() << Twine("unrecognized reloc ") + Twine(Type) << '\n';
 | 
					          llvm::errs() << Twine("unrecognized reloc ") + Twine(Type) << '\n';
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					# RUN: yaml2obj -format elf %s -o %t
 | 
				
			||||||
 | 
					# RUN: lld -flavor gnu2 %t -o %tout
 | 
				
			||||||
 | 
					# RUN: llvm-objdump -s %tout | FileCheck %s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FileHeader:
 | 
				
			||||||
 | 
					  Class:           ELFCLASS64
 | 
				
			||||||
 | 
					  Data:            ELFDATA2LSB
 | 
				
			||||||
 | 
					  Type:            ET_REL
 | 
				
			||||||
 | 
					  Machine:         EM_X86_64
 | 
				
			||||||
 | 
					Sections:
 | 
				
			||||||
 | 
					  - Name:            .text
 | 
				
			||||||
 | 
					    Type:            SHT_PROGBITS
 | 
				
			||||||
 | 
					    Size:            512
 | 
				
			||||||
 | 
					  - Name:            .rela.text
 | 
				
			||||||
 | 
					    Type:            SHT_RELA
 | 
				
			||||||
 | 
					    Info:            .text
 | 
				
			||||||
 | 
					    Relocations:
 | 
				
			||||||
 | 
					      - Offset:          0x0000000000000000
 | 
				
			||||||
 | 
					        Symbol:          _start
 | 
				
			||||||
 | 
					        Type:            R_X86_64_32S
 | 
				
			||||||
 | 
					      - Offset:          0x0000000000000004
 | 
				
			||||||
 | 
					        Symbol:          _start
 | 
				
			||||||
 | 
					        Type:            R_X86_64_64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Symbols:
 | 
				
			||||||
 | 
					  Global:
 | 
				
			||||||
 | 
					    - Name:            _start
 | 
				
			||||||
 | 
					      Section:         .text
 | 
				
			||||||
 | 
					      Value:           0x42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CHECK: 0000 42000000 42000000 00000000 00000000
 | 
				
			||||||
		Loading…
	
		Reference in New Issue