1*e4118a7aSAndreu CarminatiREQUIRES: x86 2*e4118a7aSAndreu Carminati 3*e4118a7aSAndreu Carminati# RUN: rm -rf %t && split-file %s %t 4*e4118a7aSAndreu Carminati# RUN: llvm-mc -filetype=obj -triple=x86_64 %t/a.s -o %t/a.o 5*e4118a7aSAndreu Carminati 6*e4118a7aSAndreu Carminati## The error should be triggered only for the second test where the overflow really exists. 7*e4118a7aSAndreu Carminati 8*e4118a7aSAndreu CarminatiRUN: ld.lld %t/a.o -T %t/b.lds -o /dev/null 2>&1 9*e4118a7aSAndreu CarminatiRUN: not ld.lld %t/a.o -T %t/c.lds -o /dev/null 2>&1 | FileCheck --check-prefix=ERROR %s 10*e4118a7aSAndreu Carminati 11*e4118a7aSAndreu Carminati# ERROR: error: section '_abss' will not fit in region 'SRAM0': overflowed by 1024 bytes 12*e4118a7aSAndreu Carminati# ERROR: error: section '.c.bss' will not fit in region 'SRAM0': overflowed by 1024 bytes 13*e4118a7aSAndreu Carminati# ERROR: error: section '.text' will not fit in region 'SRAM0': overflowed by 1025 bytes 14*e4118a7aSAndreu Carminati 15*e4118a7aSAndreu Carminati#--- a.s 16*e4118a7aSAndreu Carminati.section .a.bss, "aw", %nobits 17*e4118a7aSAndreu Carminati.globl abss 18*e4118a7aSAndreu Carminatiabss: 19*e4118a7aSAndreu Carminati.zero 0xDF0 20*e4118a7aSAndreu Carminati.size abss, 0xDF0 21*e4118a7aSAndreu Carminati 22*e4118a7aSAndreu Carminati.section .c.bss, "aw", %nobits 23*e4118a7aSAndreu Carminati.globl cbss 24*e4118a7aSAndreu Carminati 25*e4118a7aSAndreu Carminati.text 26*e4118a7aSAndreu Carminati.globl _start 27*e4118a7aSAndreu Carminati_start: 28*e4118a7aSAndreu Carminatinop 29*e4118a7aSAndreu Carminati 30*e4118a7aSAndreu Carminati#--- b.lds 31*e4118a7aSAndreu CarminatiMEMORY 32*e4118a7aSAndreu Carminati{ 33*e4118a7aSAndreu Carminati SRAM0 (rw) : ORIGIN = 0x20000400, LENGTH = 10K 34*e4118a7aSAndreu Carminati} 35*e4118a7aSAndreu Carminati 36*e4118a7aSAndreu CarminatiSECTIONS 37*e4118a7aSAndreu Carminati{ 38*e4118a7aSAndreu Carminati _abss ALIGN(REGION1__PRE_ALIGNMENT) : 39*e4118a7aSAndreu Carminati { 40*e4118a7aSAndreu Carminati REGION1__BEGIN = .; REGION1__ALIGNED_BEGIN = .; REGION1_ALIGNED_BEGIN = .; 41*e4118a7aSAndreu Carminati *(.a.bss) 42*e4118a7aSAndreu Carminati REGION1__END = .; . = ALIGN(REGION1__POST_ALIGNMENT); REGION1_ALIGNED_END = .; 43*e4118a7aSAndreu Carminati } > SRAM0 44*e4118a7aSAndreu Carminati} 45*e4118a7aSAndreu Carminati 46*e4118a7aSAndreu CarminatiREGION1__PRE_ALIGNMENT = 0x00000800; 47*e4118a7aSAndreu CarminatiREGION1__PADDED_XOR = ((ABSOLUTE(REGION1__ALIGNED_BEGIN) | (ABSOLUTE(REGION1__END) - 1)) & ~(ABSOLUTE(REGION1__ALIGNED_BEGIN) & (ABSOLUTE(REGION1__END) - 1))); 48*e4118a7aSAndreu CarminatiREGION1__PADDED_REGION_SHIFT = LOG2CEIL(REGION1__PADDED_XOR); 49*e4118a7aSAndreu CarminatiREGION1__PADDED_SR_SHIFT = REGION1__PADDED_REGION_SHIFT - 3; 50*e4118a7aSAndreu CarminatiREGION1__PADDED_SR_SIZE = MAX(1 << REGION1__PADDED_SR_SHIFT, 32); 51*e4118a7aSAndreu CarminatiREGION1__POST_ALIGNMENT = REGION1__PADDED_SR_SIZE; 52*e4118a7aSAndreu Carminati 53*e4118a7aSAndreu Carminati#--- c.lds 54*e4118a7aSAndreu CarminatiMEMORY 55*e4118a7aSAndreu Carminati{ 56*e4118a7aSAndreu Carminati SRAM0 (rw) : ORIGIN = 0x20000400, LENGTH = 4K 57*e4118a7aSAndreu Carminati} 58*e4118a7aSAndreu Carminati 59*e4118a7aSAndreu CarminatiSECTIONS 60*e4118a7aSAndreu Carminati{ 61*e4118a7aSAndreu Carminati _abss ALIGN(REGION1__PRE_ALIGNMENT) : 62*e4118a7aSAndreu Carminati { 63*e4118a7aSAndreu Carminati REGION1__BEGIN = .; REGION1__ALIGNED_BEGIN = .; REGION1_ALIGNED_BEGIN = .; 64*e4118a7aSAndreu Carminati *(.a.bss) 65*e4118a7aSAndreu Carminati REGION1__END = .; . = ALIGN(REGION1__POST_ALIGNMENT); REGION1_ALIGNED_END = .; 66*e4118a7aSAndreu Carminati } > SRAM0 67*e4118a7aSAndreu Carminati} 68*e4118a7aSAndreu Carminati 69*e4118a7aSAndreu CarminatiREGION1__PRE_ALIGNMENT = 0x00000800; 70*e4118a7aSAndreu CarminatiREGION1__PADDED_XOR = ((ABSOLUTE(REGION1__ALIGNED_BEGIN) | (ABSOLUTE(REGION1__END) - 1)) & ~(ABSOLUTE(REGION1__ALIGNED_BEGIN) & (ABSOLUTE(REGION1__END) - 1))); 71*e4118a7aSAndreu CarminatiREGION1__PADDED_REGION_SHIFT = LOG2CEIL(REGION1__PADDED_XOR); 72*e4118a7aSAndreu CarminatiREGION1__PADDED_SR_SHIFT = REGION1__PADDED_REGION_SHIFT - 3; 73*e4118a7aSAndreu CarminatiREGION1__PADDED_SR_SIZE = MAX(1 << REGION1__PADDED_SR_SHIFT, 32); 74*e4118a7aSAndreu CarminatiREGION1__POST_ALIGNMENT = REGION1__PADDED_SR_SIZE; 75