66 lines · plain
1; Tests that data and relro are correctly placed in sections2; specified by "#pragma clang section"3; RUN: llc -filetype=obj -mtriple x86_64-unknown-linux %s -o - | llvm-readobj -S --syms - | FileCheck %s4 5target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"6target triple = "x86_64-unknown-linux"7 8@funcs_relro = hidden constant [2 x ptr] [ptr @func1, ptr @func2], align 16 #09@var_data = hidden global i32 33, align 4 #010 11declare i32 @func1(...)12declare i32 @func2(...)13 14; Function Attrs: noinline nounwind optnone sspstrong uwtable15define hidden i32 @foo(i32 %i) {16entry:17 %i.addr = alloca i32, align 418 store i32 %i, ptr %i.addr, align 419 %0 = load i32, ptr %i.addr, align 420 %idxprom = sext i32 %0 to i6421 %arrayidx = getelementptr inbounds [2 x ptr], ptr @funcs_relro, i64 0, i64 %idxprom22 %1 = load ptr, ptr %arrayidx, align 823 %call = call i32 %1()24 %2 = load i32, ptr @var_data, align 425 %add = add nsw i32 %call, %226 ret i32 %add27}28 29attributes #0 = { "data-section"=".my_data" "relro-section"=".my_relro" "rodata-section"=".my_rodata" }30 31; CHECK: Section {32; CHECK: Index:33; CHECK: Name: .my_rodata34; CHECK: Type: SHT_PROGBITS (0x1)35; CHECK: Flags [ (0x2)36; CHECK: SHF_ALLOC (0x2)37; CHECK: ]38; CHECK: Size: 1639; CHECK: }40; CHECK: Section {41; CHECK: Index:42; CHECK: Name: .my_data43; CHECK: Type: SHT_PROGBITS (0x1)44; CHECK: Flags [ (0x3)45; CHECK: SHF_ALLOC (0x2)46; CHECK: SHF_WRITE (0x1)47; CHECK: ]48; CHECK: Size: 449; CHECK: }50; CHECK: Symbol {51; CHECK: Name: funcs_relro52; CHECK: Value: 0x053; CHECK: Size: 1654; CHECK: Binding: Global (0x1)55; CHECK: Type: Object (0x1)56; CHECK: Section: .my_rodata57; CHECK: }58; CHECK: Symbol {59; CHECK: Name: var_data60; CHECK: Value: 0x061; CHECK: Size: 462; CHECK: Binding: Global (0x1)63; CHECK: Type: Object (0x1)64; CHECK: Section: .my_data65; CHECK: }66