-
Notifications
You must be signed in to change notification settings - Fork 178
rp2xxx fixes #959
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
rp2xxx fixes #959
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,7 +3,7 @@ const std = @import("std"); | |
| const microzig = @import("microzig"); | ||
| const arch = @import("compatibility.zig").arch; | ||
|
|
||
| pub const image_def_block = if (microzig.config.ram_image and arch == .arm) Block(extern struct { | ||
| pub const image_def_block = if (microzig.config.ram_image and arch == .arm) Block(packed struct { | ||
| image_def: ImageDef, | ||
| entry_point: EntryPoint(false), | ||
| }){ | ||
|
|
@@ -24,8 +24,7 @@ pub const image_def_block = if (microzig.config.ram_image and arch == .arm) Bloc | |
| .sp = microzig.utilities.get_end_of_stack(), | ||
| }, | ||
| }, | ||
| .link = microzig.options.hal.bootmeta.next_block, | ||
| } else Block(extern struct { | ||
| } else Block(packed struct { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ditto |
||
| image_def: ImageDef, | ||
| }){ | ||
| .items = .{ | ||
|
|
@@ -39,7 +38,6 @@ pub const image_def_block = if (microzig.config.ram_image and arch == .arm) Bloc | |
| }, | ||
| }, | ||
| }, | ||
| .link = microzig.options.hal.bootmeta.next_block, | ||
| }; | ||
|
|
||
| comptime { | ||
|
|
@@ -55,17 +53,20 @@ pub fn Block(Items: type) type { | |
| header: u32 = 0xffffded3, | ||
| items: Items, | ||
| last_item: u32 = 0x000000ff | ((@sizeOf(Items) / 4) << 8), | ||
| link: ?*const anyopaque = null, | ||
| /// Relative offset from this block's header to the next block's | ||
| /// header. Zero means self-loop (single-block chain). | ||
| link: i32 = 0, | ||
| footer: u32 = 0xab123579, | ||
| }; | ||
| } | ||
|
|
||
| pub const ImageDef = packed struct { | ||
| pub const ImageDef = packed struct(u32) { | ||
| // IMAGE_DEF type = 0x42 | ||
| item_type: u8 = 0x42, | ||
| block_size: u8 = 0x01, | ||
| image_type_flags: ImageTypeFlags, | ||
|
|
||
| pub const ImageTypeFlags = packed struct { | ||
| pub const ImageTypeFlags = packed struct(u16) { | ||
| image_type: ImageType, | ||
| exe_security: ExeSecurity, | ||
| reserved0: u2 = 0, | ||
|
|
@@ -100,8 +101,8 @@ pub const ImageDef = packed struct { | |
|
|
||
| pub fn EntryPoint(with_stack_limit: bool) type { | ||
| if (with_stack_limit) { | ||
| return extern struct { | ||
| header: packed struct { | ||
| return packed struct(u128) { | ||
| header: packed struct(u32) { | ||
|
Comment on lines
+104
to
+105
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What is the reason for replacing all externs with packed (just wondering)?
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. as I understand, packed structs are 'now' the correct way to bit pack. And by using them, we can say how large they are and catch in the compile if the size changes. I accidentally changed the size of a field and it bit me :) |
||
| item_type: u8 = 0x44, | ||
| block_size: u8 = 0x04, | ||
| padding: u16 = 0, | ||
|
|
@@ -111,8 +112,8 @@ pub fn EntryPoint(with_stack_limit: bool) type { | |
| sp_limit: u32, | ||
| }; | ||
| } else { | ||
| return extern struct { | ||
| header: packed struct { | ||
| return packed struct(u96) { | ||
| header: packed struct(u32) { | ||
| item_type: u8 = 0x44, | ||
| block_size: u8 = 0x03, | ||
| padding: u16 = 0, | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please include the backing integer for the packed struct, that's required upstream
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you mean that all packed structs will require the size? I'd rather not put it here, since it's derived from the size of its fields, and I set it there. If we were to change this, we'd have to manually add up the sizes of all of fields.