mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 08:45:52 +00:00
elf: test large alignment of funcs in DSO
This commit is contained in:
parent
031e12b963
commit
11bdfe1179
@ -42,6 +42,7 @@ pub fn build(b: *Build) void {
|
||||
|
||||
elf_step.dependOn(testDsoPlt(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
|
||||
elf_step.dependOn(testDsoUndef(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
|
||||
elf_step.dependOn(testLargeAlignmentDso(b, .{ .target = glibc_target, .dynamic_linker = dynamic_linker }));
|
||||
}
|
||||
|
||||
fn testCommonSymbols(b: *Build, opts: Options) *Step {
|
||||
@ -325,6 +326,53 @@ fn testGcSections(b: *Build, opts: Options) *Step {
|
||||
return test_step;
|
||||
}
|
||||
|
||||
fn testLargeAlignmentDso(b: *Build, opts: Options) *Step {
|
||||
const test_step = addTestStep(b, "large-alignment-dso", opts);
|
||||
|
||||
const dso = addSharedLibrary(b, opts);
|
||||
addCSourceBytes(dso,
|
||||
\\#include <stdio.h>
|
||||
\\#include <stdint.h>
|
||||
\\void hello() __attribute__((aligned(32768), section(".hello")));
|
||||
\\void world() __attribute__((aligned(32768), section(".world")));
|
||||
\\void hello() {
|
||||
\\ printf("Hello");
|
||||
\\}
|
||||
\\void world() {
|
||||
\\ printf(" world");
|
||||
\\}
|
||||
\\void greet() {
|
||||
\\ hello();
|
||||
\\ world();
|
||||
\\}
|
||||
, &.{"-fPIC"});
|
||||
dso.link_function_sections = true;
|
||||
dso.is_linking_libc = true;
|
||||
|
||||
const check = dso.checkObject();
|
||||
check.checkInSymtab();
|
||||
check.checkExtract("{addr1} {size1} {shndx1} FUNC GLOBAL DEFAULT hello");
|
||||
check.checkInSymtab();
|
||||
check.checkExtract("{addr2} {size2} {shndx2} FUNC GLOBAL DEFAULT world");
|
||||
check.checkComputeCompare("addr1 16 %", .{ .op = .eq, .value = .{ .literal = 0 } });
|
||||
check.checkComputeCompare("addr2 16 %", .{ .op = .eq, .value = .{ .literal = 0 } });
|
||||
test_step.dependOn(&check.step);
|
||||
|
||||
const exe = addExecutable(b, opts);
|
||||
addCSourceBytes(exe,
|
||||
\\void greet();
|
||||
\\int main() { greet(); }
|
||||
, &.{});
|
||||
exe.linkLibrary(dso);
|
||||
exe.is_linking_libc = true;
|
||||
|
||||
const run = addRunArtifact(exe);
|
||||
run.expectStdOutEqual("Hello world");
|
||||
test_step.dependOn(&run.step);
|
||||
|
||||
return test_step;
|
||||
}
|
||||
|
||||
fn testLinkingC(b: *Build, opts: Options) *Step {
|
||||
const test_step = addTestStep(b, "linking-c", opts);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user