1f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// RUN: llvm-mc -filetype=obj -triple i386-pc-linux-gnu %s -o - | llvm-readobj -r -t | FileCheck %s 2c97f80efc80030c7544a9903c79d2dccd197a0ffRafael Espindola 31683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindola// Test that we produce the correct relocation types and that the relocations 41683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindola// correctly point to the section or the symbol. 5c97f80efc80030c7544a9903c79d2dccd197a0ffRafael Espindola 6f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK: Relocations [ 77486d92a6c949a193bb75c0ffa0170eeb2fabb80Rafael Espindola// CHECK-NEXT: Section (2) .rel.text { 8f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x2 R_386_GOTOFF .Lfoo 0x0 9f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x{{[^ ]+}} R_386_PLT32 bar2 0x0 10f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x{{[^ ]+}} R_386_GOTPC _GLOBAL_OFFSET_TABLE_ 0x0 111683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindola// Relocation 3 (bar3@GOTOFF) is done with symbol 7 (bss) 12f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x{{[^ ]+}} R_386_GOTOFF .bss 0x0 13eada30479399014c22c7b7edb008177c312eefeeRafael Espindola// Relocation 4 (bar2@GOT) is of type R_386_GOT32 14f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x{{[^ ]+}} R_386_GOT32 bar2j 0x0 15eada30479399014c22c7b7edb008177c312eefeeRafael Espindola 163cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola// Relocation 5 (foo@TLSGD) is of type R_386_TLS_GD 17f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x20 R_386_TLS_GD foo 0x0 183cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola// Relocation 6 ($foo@TPOFF) is of type R_386_TLS_LE_32 19f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x25 R_386_TLS_LE_32 foo 0x0 203cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola// Relocation 7 (foo@INDNTPOFF) is of type R_386_TLS_IE 21f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x2B R_386_TLS_IE foo 0x0 223cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola// Relocation 8 (foo@NTPOFF) is of type R_386_TLS_LE 23f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x31 R_386_TLS_LE foo 0x0 24a0a2f8734cdfc19d44201b791a969bcdda96bb70Rafael Espindola// Relocation 9 (foo@GOTNTPOFF) is of type R_386_TLS_GOTIE 25f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x37 R_386_TLS_GOTIE foo 0x0 26a264f72d3fb9dec1427480fcf17ef3c746ea723aRafael Espindola// Relocation 10 (foo@TLSLDM) is of type R_386_TLS_LDM 27f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x3D R_386_TLS_LDM foo 0x0 280cf15d61b7e3bf53f5a99f58ada37b93bc039559Rafael Espindola// Relocation 11 (foo@DTPOFF) is of type R_386_TLS_LDO_32 29f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x43 R_386_TLS_LDO_32 foo 0x0 3012203cc7c3f7392d62556946a10b2f10205ea63dRafael Espindola// Relocation 12 (calll 4096) is of type R_386_PC32 31f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x48 R_386_PC32 - 0x0 3225958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 13 (zed@GOT) is of type R_386_GOT32 and uses the symbol 33f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x4E R_386_GOT32 zed 0x0 3425958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 14 (zed@GOTOFF) is of type R_386_GOTOFF and uses the symbol 35f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x54 R_386_GOTOFF zed 0x0 3625958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 15 (zed@INDNTPOFF) is of type R_386_TLS_IE and uses the symbol 37f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x5A R_386_TLS_IE zed 0x0 3825958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 16 (zed@NTPOFF) is of type R_386_TLS_LE and uses the symbol 39f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x60 R_386_TLS_LE zed 0x0 4025958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 17 (zed@GOTNTPOFF) is of type R_386_TLS_GOTIE and uses the symbol 41f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x66 R_386_TLS_GOTIE zed 0x0 4225958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 18 (zed@PLT) is of type R_386_PLT32 and uses the symbol 43f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x6B R_386_PLT32 zed 0x0 4425958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 19 (zed@TLSGD) is of type R_386_TLS_GD and uses the symbol 45f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x71 R_386_TLS_GD zed 0x0 4625958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 20 (zed@TLSLDM) is of type R_386_TLS_LDM and uses the symbol 47f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x77 R_386_TLS_LDM zed 0x0 4825958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 21 (zed@TPOFF) is of type R_386_TLS_LE_32 and uses the symbol 49f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x7D R_386_TLS_LE_32 zed 0x0 5025958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola// Relocation 22 (zed@DTPOFF) is of type R_386_TLS_LDO_32 and uses the symbol 51f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x83 R_386_TLS_LDO_32 zed 0x0 52a5ff979c114a658c69fddd065d702a13c40f6ae1Rafael Espindola// Relocation 23 ($bar) is of type R_386_32 and uses the section 53f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x{{[^ ]+}} R_386_32 .text 0x0 54e0b87032f5ac8134b7585bdc4a0f2c77158b962dNick Lewycky// Relocation 24 (foo@GOTTPOFF(%edx)) is of type R_386_TLS_IE_32 and uses the 55e0b87032f5ac8134b7585bdc4a0f2c77158b962dNick Lewycky// symbol 56f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x8E R_386_TLS_IE_32 foo 0x0 571d5969d839ddc4d0af93fd035aa13131e5c6fa82Rafael Espindola// Relocation 25 (_GLOBAL_OFFSET_TABLE_-bar2) is of type R_386_GOTPC. 58f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x94 R_386_GOTPC _GLOBAL_OFFSET_TABLE_ 0x0 593c68acd202d061c38e9b7744012094b4009d932aRafael Espindola// Relocation 26 (und_symbol-bar2) is of type R_386_PC32 60f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: 0x9A R_386_PC32 und_symbol 0x0 6136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Relocation 27 (und_symbol-bar2) is of type R_386_PC16 6236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// CHECK-NEXT: 0x9E R_386_PC16 und_symbol 0x0 6336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// Relocation 28 (und_symbol-bar2) is of type R_386_PC8 6436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// CHECK-NEXT: 0xA0 R_386_PC8 und_symbol 0x0 65dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines// CHECK-NEXT: 0xA3 R_386_GOTOFF und_symbol 0x0 66f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: } 67f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: ] 687c18fa87a4d4ed8b0cfe1ec65597c748c6d91ca9Rafael Espindola 697c18fa87a4d4ed8b0cfe1ec65597c748c6d91ca9Rafael Espindola// Symbol 4 is zed 70f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK: Symbol { 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines// CHECK: Name: zed 72f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Value: 0x0 73f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Size: 0 74f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Binding: Local 75f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Type: TLS 76f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Other: 0 77f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Section: zedsec (0x5) 78f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: } 797c18fa87a4d4ed8b0cfe1ec65597c748c6d91ca9Rafael Espindola// Symbol 7 is section 4 80f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK: Symbol { 81f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK: Name: .bss (0) 82f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Value: 0x0 83f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Size: 0 84f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Binding: Local 85f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Type: Section 86f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Other: 0 87f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: Section: .bss (0x4) 88f89da7210b09a0a0f7c9ee216cd54dca03c6b64aNico Rieck// CHECK-NEXT: } 897c18fa87a4d4ed8b0cfe1ec65597c748c6d91ca9Rafael Espindola 90c97f80efc80030c7544a9903c79d2dccd197a0ffRafael Espindola .text 91c97f80efc80030c7544a9903c79d2dccd197a0ffRafael Espindolabar: 92c97f80efc80030c7544a9903c79d2dccd197a0ffRafael Espindola leal .Lfoo@GOTOFF(%ebx), %eax 939edab3a9e15c40c1c9bf70df81c6afdab1cd02c2Rafael Espindola 949edab3a9e15c40c1c9bf70df81c6afdab1cd02c2Rafael Espindola .global bar2 959edab3a9e15c40c1c9bf70df81c6afdab1cd02c2Rafael Espindolabar2: 969edab3a9e15c40c1c9bf70df81c6afdab1cd02c2Rafael Espindola calll bar2@PLT 97aa85c216334a6adac7e0a154d357b370629dc1bcRafael Espindola addl $_GLOBAL_OFFSET_TABLE_, %ebx 98ce2d3c57758619e99a99104e1168a9558658fab0Rafael Espindola movb bar3@GOTOFF(%ebx), %al 99ce2d3c57758619e99a99104e1168a9558658fab0Rafael Espindola 100ce2d3c57758619e99a99104e1168a9558658fab0Rafael Espindola .type bar3,@object 101ce2d3c57758619e99a99104e1168a9558658fab0Rafael Espindola .local bar3 102ce2d3c57758619e99a99104e1168a9558658fab0Rafael Espindola .comm bar3,1,1 1039edab3a9e15c40c1c9bf70df81c6afdab1cd02c2Rafael Espindola 104eada30479399014c22c7b7edb008177c312eefeeRafael Espindola movl bar2j@GOT(%eax), %eax 105eada30479399014c22c7b7edb008177c312eefeeRafael Espindola 1063cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola leal foo@TLSGD(, %ebx,1), %eax 1073cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola movl $foo@TPOFF, %edx 1083cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola movl foo@INDNTPOFF, %ecx 1093cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola addl foo@NTPOFF(%eax), %eax 110a0a2f8734cdfc19d44201b791a969bcdda96bb70Rafael Espindola addl foo@GOTNTPOFF(%ebx), %ecx 111a264f72d3fb9dec1427480fcf17ef3c746ea723aRafael Espindola leal foo@TLSLDM(%ebx), %eax 1120cf15d61b7e3bf53f5a99f58ada37b93bc039559Rafael Espindola leal foo@DTPOFF(%eax), %edx 11312203cc7c3f7392d62556946a10b2f10205ea63dRafael Espindola calll 4096 11425958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@GOT(%eax), %eax 11525958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@GOTOFF(%eax), %eax 11625958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@INDNTPOFF(%eax), %eax 1171683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindola movl zed@NTPOFF(%eax), %eax 11825958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@GOTNTPOFF(%eax), %eax 11925958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola call zed@PLT 12025958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@TLSGD(%eax), %eax 12125958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@TLSLDM(%eax), %eax 12225958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@TPOFF(%eax), %eax 12325958730dffe0a16f9c251a1fa317799b8419a1fRafael Espindola movl zed@DTPOFF(%eax), %eax 124a5ff979c114a658c69fddd065d702a13c40f6ae1Rafael Espindola pushl $bar 125e0b87032f5ac8134b7585bdc4a0f2c77158b962dNick Lewycky addl foo@GOTTPOFF(%edx), %eax 1261d5969d839ddc4d0af93fd035aa13131e5c6fa82Rafael Espindola subl _GLOBAL_OFFSET_TABLE_-bar2, %ebx 1273c68acd202d061c38e9b7744012094b4009d932aRafael Espindola leal und_symbol-bar2(%edx),%ecx 12836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .word und_symbol-bar2 12936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines .byte und_symbol-bar2 1301683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindola 131dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines leal 1 + und_symbol@GOTOFF, %edi 132dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 1331683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindola .section zedsec,"awT",@progbits 1341683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindolazed: 1351683fcc82397681a64a35884edc9c62c49f2f179Rafael Espindola .long 0 1363cede2d0b2b6cc0a06f55da7c2f8e4263ec0091eRafael Espindola 1379edab3a9e15c40c1c9bf70df81c6afdab1cd02c2Rafael Espindola .section .rodata.str1.16,"aMS",@progbits,1 138c97f80efc80030c7544a9903c79d2dccd197a0ffRafael Espindola.Lfoo: 139c97f80efc80030c7544a9903c79d2dccd197a0ffRafael Espindola .asciz "bool llvm::llvm_start_multithreaded()" 140