Created
December 15, 2018 03:02
-
-
Save Diltsman/0c9a7c8e2aff06d6e3e5d2d8f9264c3f to your computer and use it in GitHub Desktop.
Issues with linker variable values in Zig
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
test.zig | |
// .data related linker variables | |
extern const _data_begin: u32; | |
extern const _data_end: u32; | |
extern var _d: u32; | |
// .bss related linker variables | |
extern var _bss_begin: u32; | |
extern const _bss_end: u32; | |
extern var _b: u32; | |
var bss_var: u16 = 0; | |
var data_var: u16 = 1234; | |
const rodata_var: u16 = 4567; | |
nakedcc fn _start() void { | |
var db = &_data_begin; | |
var de = &_data_end; | |
var d_size = @ptrToInt(de) - @ptrToInt(db); | |
var bb = &_bss_begin; | |
var be = &_bss_end; | |
var b_size = @ptrToInt(be) - @ptrToInt(bb); | |
bss_var = 1; | |
data_var = 2; | |
var x = rodata_var; | |
build.zig | |
const builtin = @import("builtin"); | |
const Builder = @import("std").build.Builder; | |
pub fn build(b: *Builder) void { | |
const mode = b.standardReleaseOptions(); | |
const exe = b.addExecutable("SAM3X8E", "test.zig"); | |
exe.setTarget(builtin.Arch.armv7m, builtin.Os.freestanding, builtin.Environ.eabi); | |
exe.setBuildMode(mode); | |
exe.setLinkerScriptPath("build.ld"); | |
const run_step = b.step("run", "Run the app"); | |
const run_cmd = b.addCommand(".", b.env_map, [][]const u8{exe.getOutputPath()}); | |
run_step.dependOn(&run_cmd.step); | |
run_cmd.step.dependOn(&exe.step); | |
b.default_step.dependOn(&exe.step); | |
b.installArtifact(exe); | |
} | |
build.ld | |
MEMORY | |
{ | |
sram0 (!rx) : ORIGIN = 0x20000000, LENGTH = 64K | |
sram1 (!rx) : ORIGIN = 0x20080000, LENGTH = 32K | |
nfcsram (!rx) : ORIGIN = 0x20100000, LENGTH = 4224 | |
flash0 (rx) : ORIGIN = 0x00080000, LENGTH = 256K | |
flash1 (rx) : ORIGIN = 0x000c0000, LENGTH = 256K | |
pioa (rw) : ORIGIN = 0x400e0e00, LENGTH = 328 | |
piob (rw) : ORIGIN = 0x400e1000, LENGTH = 328 | |
pioc (rw) : ORIGIN = 0x400e1200, LENGTH = 328 | |
piod (rw) : ORIGIN = 0x400e1400, LENGTH = 328 | |
} | |
SECTIONS | |
{ | |
.text : | |
{ | |
KEEP(*(.vector)); | |
. = ALIGN(4); | |
*(.text); | |
}>flash0 | |
. = ALIGN(4); | |
_d = .; | |
.data : AT(_d) | |
{ | |
. = ALIGN(4); | |
_data_begin = .; | |
*(.data); | |
. = ALIGN(4); | |
_data_end = .; | |
}>sram0 | |
_b = .; | |
.bss (NOLOAD) : | |
{ | |
. = ALIGN(4); | |
_bss_begin = .; | |
*(.bss); | |
. = ALIGN(4); | |
_bss_end = .; | |
}>sram0 | |
.rodata : | |
{ | |
. = ALIGN(4); | |
*(.rodata); | |
}>flash0 | |
.data.rel.ro : | |
{ | |
. = ALIGN(4); | |
*(.data.rel.ro); | |
}>flash0 | |
.got : | |
{ | |
. = ALIGN(4); | |
*(.got); | |
}>flash0 | |
.ARM : | |
{ | |
. = ALIGN(4); | |
*(.ARM.exidx); | |
}>flash0 | |
.pioa (NOLOAD) : | |
{ | |
*(.pioa); | |
}>pioa | |
.piob (NOLOAD) : | |
{ | |
*(.piob); | |
}>piob | |
.pioc (NOLOAD) : | |
{ | |
*(.pioc); | |
}>pioc | |
.piod (NOLOAD) : | |
{ | |
*(.piod); | |
}>piod | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment