mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Relocation against a symbol, instead of against section. We had some extreme
test cases where there were a lot of relocations applied relative to a large rodata section. Gas would create a symbol for each of these whereas we would be relative to the beginning of the rodata section. This change mimics what gas does. Patch by Jack Carter. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146468 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6f20c61e07
commit
f3315cf65f
@ -1851,7 +1851,8 @@ const MCSymbol *MipsELFObjectWriter::ExplicitRelSym(const MCAssembler &Asm,
|
||||
assert(Target.getSymA() && "SymA cannot be 0.");
|
||||
const MCSymbol &Sym = Target.getSymA()->getSymbol();
|
||||
|
||||
if (Sym.getSection().getKind().isMergeable1ByteCString())
|
||||
if (Sym.getSection().getKind().isMergeableCString() ||
|
||||
Sym.getSection().getKind().isMergeableConst())
|
||||
return &Sym;
|
||||
|
||||
return NULL;
|
||||
@ -1914,4 +1915,3 @@ unsigned MipsELFObjectWriter::GetRelocType(const MCValue &Target,
|
||||
|
||||
return Type;
|
||||
}
|
||||
|
||||
|
29
test/CodeGen/Mips/DO-relsym.ll
Normal file
29
test/CodeGen/Mips/DO-relsym.ll
Normal file
@ -0,0 +1,29 @@
|
||||
; RUN: llc -filetype=obj -mtriple mipsel-unknown-linux %s -o - | elf-dump --dump-section-data | FileCheck %s
|
||||
|
||||
; Check that the appropriate symbols were created.
|
||||
|
||||
; CHECK: (('st_name', 0x{{[0-9|a-f]+}}) # '$.str'
|
||||
; CHECK: (('st_name', 0x{{[0-9|a-f]+}}) # '$.str1'
|
||||
; CHECK: (('st_name', 0x{{[0-9|a-f]+}}) # '$CPI0_0'
|
||||
; CHECK: (('st_name', 0x{{[0-9|a-f]+}}) # '$CPI0_1'
|
||||
|
||||
@.str = private unnamed_addr constant [6 x i8] c"abcde\00", align 1
|
||||
@gc1 = external global i8*
|
||||
@.str1 = private unnamed_addr constant [5 x i8] c"fghi\00", align 1
|
||||
@gc2 = external global i8*
|
||||
@gd1 = external global double
|
||||
@gd2 = external global double
|
||||
|
||||
define void @foo1() nounwind {
|
||||
entry:
|
||||
store i8* getelementptr inbounds ([6 x i8]* @.str, i32 0, i32 0), i8** @gc1, align 4
|
||||
store i8* getelementptr inbounds ([5 x i8]* @.str1, i32 0, i32 0), i8** @gc2, align 4
|
||||
%0 = load double* @gd1, align 8
|
||||
%add = fadd double %0, 2.500000e+00
|
||||
store double %add, double* @gd1, align 8
|
||||
%1 = load double* @gd2, align 8
|
||||
%add1 = fadd double %1, 4.500000e+00
|
||||
store double %add1, double* @gd2, align 8
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user