diff --git a/objdiff-core/src/obj/mod.rs b/objdiff-core/src/obj/mod.rs index f3f18a2..02a9e02 100644 --- a/objdiff-core/src/obj/mod.rs +++ b/objdiff-core/src/obj/mod.rs @@ -9,7 +9,10 @@ use alloc::{ vec, vec::Vec, }; -use core::{fmt, num::NonZeroU32}; +use core::{ + fmt, + num::{NonZeroU32, NonZeroU64}, +}; use flagset::{FlagSet, flags}; @@ -70,6 +73,7 @@ pub struct Section { pub kind: SectionKind, pub data: SectionData, pub flags: SectionFlagSet, + pub align: Option, pub relocations: Vec, /// Line number info (.line or .debug_line section) pub line_info: BTreeMap, @@ -105,6 +109,12 @@ impl Section { } } + // The alignment to use when "Combine data/text sections" is enabled. + pub fn combined_alignment(&self) -> u64 { + const MIN_ALIGNMENT: u64 = 4; + self.align.map(|align| align.get().max(MIN_ALIGNMENT)).unwrap_or(MIN_ALIGNMENT) + } + pub fn relocation_at<'obj>( &'obj self, obj: &'obj Object, @@ -363,6 +373,7 @@ static DUMMY_SECTION: Section = Section { kind: SectionKind::Unknown, data: SectionData(Vec::new()), flags: SectionFlagSet::empty(), + align: None, relocations: Vec::new(), line_info: BTreeMap::new(), virtual_address: None, diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 21b6984..5f748c4 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -4,7 +4,7 @@ use alloc::{ string::{String, ToString}, vec::Vec, }; -use core::cmp::Ordering; +use core::{cmp::Ordering, num::NonZeroU64}; use anyhow::{Context, Result, anyhow, bail, ensure}; use object::{Object as _, ObjectSection as _, ObjectSymbol as _}; @@ -17,7 +17,7 @@ use crate::{ Symbol, SymbolFlag, SymbolKind, split_meta::{SPLITMETA_SECTION, SplitMeta}, }, - util::{read_u16, read_u32}, + util::{align_data_slice_to, align_u64_to, read_u16, read_u32}, }; fn map_section_kind(section: &object::Section) -> SectionKind { @@ -257,6 +257,7 @@ fn map_sections( kind, data: SectionData(data), flags: Default::default(), + align: NonZeroU64::new(section.align()), relocations: Default::default(), virtual_address, line_info: Default::default(), @@ -739,7 +740,10 @@ fn do_combine_sections( } offsets.push(current_offset); current_offset += section.size; + let align = section.combined_alignment(); + current_offset = align_u64_to(current_offset, align); data_size += section.data.len(); + data_size = align_u64_to(data_size as u64, align) as usize; num_relocations += section.relocations.len(); } if data_size > 0 { @@ -754,6 +758,7 @@ fn do_combine_sections( let section = &mut sections[i]; section.size = 0; data.append(&mut section.data.0); + align_data_slice_to(&mut data, section.combined_alignment()); section.relocations.iter_mut().for_each(|r| r.address += offset); relocations.append(&mut section.relocations); line_info.append(&mut section.line_info.iter().map(|(&a, &l)| (a + offset, l)).collect()); diff --git a/objdiff-core/src/obj/snapshots/objdiff_core__obj__read__test__combine_sections.snap b/objdiff-core/src/obj/snapshots/objdiff_core__obj__read__test__combine_sections.snap index 5a8bfae..383823d 100644 --- a/objdiff-core/src/obj/snapshots/objdiff_core__obj__read__test__combine_sections.snap +++ b/objdiff-core/src/obj/snapshots/objdiff_core__obj__read__test__combine_sections.snap @@ -14,6 +14,7 @@ expression: "(sections, symbols)" 8, ), flags: FlagSet(), + align: None, relocations: [ Relocation { flags: Elf( @@ -53,6 +54,7 @@ expression: "(sections, symbols)" 12, ), flags: FlagSet(Combined), + align: None, relocations: [ Relocation { flags: Elf( @@ -87,6 +89,7 @@ expression: "(sections, symbols)" 0, ), flags: FlagSet(Hidden), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -101,6 +104,7 @@ expression: "(sections, symbols)" 0, ), flags: FlagSet(Hidden), + align: None, relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/src/obj/split_meta.rs b/objdiff-core/src/obj/split_meta.rs index 8e407df..e4599fc 100644 --- a/objdiff-core/src/obj/split_meta.rs +++ b/objdiff-core/src/obj/split_meta.rs @@ -3,6 +3,10 @@ use alloc::{string::String, vec, vec::Vec}; use anyhow::{Result, anyhow}; use object::{Endian, ObjectSection, elf::SHT_NOTE}; +#[cfg(feature = "std")] +use crate::util::align_data_to_4; +use crate::util::align_size_to_4; + pub const SPLITMETA_SECTION: &str = ".note.split"; pub const SHT_SPLITMETA: u32 = SHT_NOTE; pub const ELF_NOTE_SPLIT: &[u8] = b"Split"; @@ -190,17 +194,6 @@ where E: Endian } } -fn align_size_to_4(size: usize) -> usize { (size + 3) & !3 } - -#[cfg(feature = "std")] -fn align_data_to_4(writer: &mut W, len: usize) -> std::io::Result<()> { - const ALIGN_BYTES: &[u8] = &[0; 4]; - if len % 4 != 0 { - writer.write_all(&ALIGN_BYTES[..4 - len % 4])?; - } - Ok(()) -} - // ELF note format: // Name Size | 4 bytes (integer) // Desc Size | 4 bytes (integer) diff --git a/objdiff-core/src/util.rs b/objdiff-core/src/util.rs index ddea4ed..f3dc6b7 100644 --- a/objdiff-core/src/util.rs +++ b/objdiff-core/src/util.rs @@ -1,4 +1,4 @@ -use alloc::format; +use alloc::{format, vec::Vec}; use core::fmt; use anyhow::{Result, ensure}; @@ -39,3 +39,24 @@ pub fn read_u16(obj_file: &object::File, reader: &mut &[u8]) -> Result { *reader = &reader[2..]; Ok(obj_file.endianness().read_u16(value)) } + +pub fn align_size_to_4(size: usize) -> usize { (size + 3) & !3 } + +#[cfg(feature = "std")] +pub fn align_data_to_4( + writer: &mut W, + len: usize, +) -> std::io::Result<()> { + const ALIGN_BYTES: &[u8] = &[0; 4]; + if len % 4 != 0 { + writer.write_all(&ALIGN_BYTES[..4 - len % 4])?; + } + Ok(()) +} + +pub fn align_u64_to(len: u64, align: u64) -> u64 { len + ((align - (len % align)) % align) } + +pub fn align_data_slice_to(data: &mut Vec, align: u64) { + const ALIGN_BYTE: u8 = 0; + data.resize(align_u64_to(data.len() as u64, align) as usize, ALIGN_BYTE); +} diff --git a/objdiff-core/tests/snapshots/arch_arm__read_arm.snap b/objdiff-core/tests/snapshots/arch_arm__read_arm.snap index b733dc7..ec9917a 100644 --- a/objdiff-core/tests/snapshots/arch_arm__read_arm.snap +++ b/objdiff-core/tests/snapshots/arch_arm__read_arm.snap @@ -1519,6 +1519,9 @@ Object { 556, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [ Relocation { flags: Elf( @@ -1718,6 +1721,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1732,6 +1738,9 @@ Object { 76, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [ Relocation { flags: Elf( @@ -1883,6 +1892,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1897,6 +1909,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1911,6 +1926,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1925,6 +1943,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/tests/snapshots/arch_arm__read_thumb.snap b/objdiff-core/tests/snapshots/arch_arm__read_thumb.snap index f68b3ff..94eb210 100644 --- a/objdiff-core/tests/snapshots/arch_arm__read_thumb.snap +++ b/objdiff-core/tests/snapshots/arch_arm__read_thumb.snap @@ -3449,6 +3449,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3463,6 +3464,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3477,6 +3479,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3491,6 +3494,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3505,6 +3509,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3519,6 +3524,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3533,6 +3539,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3547,6 +3554,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3561,6 +3569,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3575,6 +3584,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3589,6 +3599,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3603,6 +3614,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3617,6 +3629,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3631,6 +3644,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3645,6 +3659,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3659,6 +3674,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3673,6 +3689,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, @@ -3687,6 +3704,9 @@ Object { 244, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Elf( @@ -3797,6 +3817,7 @@ Object { 0, ), flags: FlagSet(), + align: None, relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/tests/snapshots/arch_mips__read_mips.snap b/objdiff-core/tests/snapshots/arch_mips__read_mips.snap index dd2b681..b24dd19 100644 --- a/objdiff-core/tests/snapshots/arch_mips__read_mips.snap +++ b/objdiff-core/tests/snapshots/arch_mips__read_mips.snap @@ -683,6 +683,9 @@ Object { 632, ), flags: FlagSet(), + align: Some( + 8, + ), relocations: [ Relocation { flags: Elf( @@ -1306,6 +1309,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1320,6 +1326,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1334,6 +1343,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1348,6 +1360,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1362,6 +1377,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1376,6 +1394,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1390,6 +1411,9 @@ Object { 43, ), flags: FlagSet(), + align: Some( + 8, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1404,6 +1428,9 @@ Object { 76, ), flags: FlagSet(), + align: Some( + 8, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1418,6 +1445,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1432,6 +1462,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1446,6 +1479,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/tests/snapshots/arch_ppc__read_extab.snap b/objdiff-core/tests/snapshots/arch_ppc__read_extab.snap index 24c119b..0753fd7 100644 --- a/objdiff-core/tests/snapshots/arch_ppc__read_extab.snap +++ b/objdiff-core/tests/snapshots/arch_ppc__read_extab.snap @@ -317,6 +317,9 @@ Object { 552, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Elf( @@ -340,6 +343,9 @@ Object { 40, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Elf( @@ -363,6 +369,9 @@ Object { 36, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Elf( @@ -426,6 +435,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -440,6 +452,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -454,6 +469,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -468,6 +486,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -482,6 +503,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -496,6 +520,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -510,6 +537,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/tests/snapshots/arch_ppc__read_ppc.snap b/objdiff-core/tests/snapshots/arch_ppc__read_ppc.snap index 9367287..6c73593 100644 --- a/objdiff-core/tests/snapshots/arch_ppc__read_ppc.snap +++ b/objdiff-core/tests/snapshots/arch_ppc__read_ppc.snap @@ -1,6 +1,5 @@ --- source: objdiff-core/tests/arch_ppc.rs -assertion_line: 14 expression: obj --- Object { @@ -167,6 +166,9 @@ Object { 284, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Elf( @@ -392,6 +394,9 @@ Object { 4, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Elf( @@ -417,6 +422,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 8, + ), relocations: [], line_info: {}, virtual_address: Some( @@ -433,6 +441,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -447,6 +458,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -461,6 +475,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -475,6 +492,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -489,6 +509,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -503,6 +526,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -517,6 +543,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/tests/snapshots/arch_x86__read_x86.snap b/objdiff-core/tests/snapshots/arch_x86__read_x86.snap index 74c6f36..dfba455 100644 --- a/objdiff-core/tests/snapshots/arch_x86__read_x86.snap +++ b/objdiff-core/tests/snapshots/arch_x86__read_x86.snap @@ -136,6 +136,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -150,6 +153,9 @@ Object { 10, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -173,6 +179,9 @@ Object { 18, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [ Relocation { flags: Coff( diff --git a/objdiff-core/tests/snapshots/arch_x86__read_x86_64.snap b/objdiff-core/tests/snapshots/arch_x86__read_x86_64.snap index b3bdf8b..3c684df 100644 --- a/objdiff-core/tests/snapshots/arch_x86__read_x86_64.snap +++ b/objdiff-core/tests/snapshots/arch_x86__read_x86_64.snap @@ -866,6 +866,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -880,6 +883,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -894,6 +900,9 @@ Object { 429, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [ Relocation { flags: Coff( @@ -1029,6 +1038,9 @@ Object { 141, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1043,6 +1055,9 @@ Object { 87, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1057,6 +1072,9 @@ Object { 105, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1071,6 +1089,9 @@ Object { 82, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1085,6 +1106,9 @@ Object { 8, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1099,6 +1123,9 @@ Object { 12, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -1138,6 +1165,9 @@ Object { 8, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1152,6 +1182,9 @@ Object { 12, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -1191,6 +1224,9 @@ Object { 8, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1205,6 +1241,9 @@ Object { 12, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -1244,6 +1283,9 @@ Object { 8, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1258,6 +1300,9 @@ Object { 12, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -1297,6 +1342,9 @@ Object { 256, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [ Relocation { flags: Coff( @@ -1344,6 +1392,9 @@ Object { 20, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -1367,6 +1418,9 @@ Object { 12, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -1406,6 +1460,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1420,6 +1477,9 @@ Object { 8, ), flags: FlagSet(), + align: Some( + 8, + ), relocations: [ Relocation { flags: Coff( @@ -1443,6 +1503,9 @@ Object { 8, ), flags: FlagSet(), + align: Some( + 8, + ), relocations: [ Relocation { flags: Coff( @@ -1466,6 +1529,9 @@ Object { 4, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1480,6 +1546,9 @@ Object { 4, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -1494,6 +1563,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/tests/snapshots/arch_x86__read_x86_combine_sections.snap b/objdiff-core/tests/snapshots/arch_x86__read_x86_combine_sections.snap index c0f95d2..2b09434 100644 --- a/objdiff-core/tests/snapshots/arch_x86__read_x86_combine_sections.snap +++ b/objdiff-core/tests/snapshots/arch_x86__read_x86_combine_sections.snap @@ -13,6 +13,9 @@ expression: obj.sections 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -27,6 +30,9 @@ expression: obj.sections 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -41,6 +47,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -55,6 +64,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -69,6 +81,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -83,6 +98,9 @@ expression: obj.sections 56, ), flags: FlagSet(Combined), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -132,12 +150,15 @@ expression: obj.sections id: ".rdata-combined", name: ".rdata", address: 0, - size: 295, + size: 304, kind: Data, data: SectionData( - 295, + 304, ), flags: FlagSet(Combined), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -159,7 +180,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 21, + address: 24, target_symbol: 13, addend: 0, }, @@ -167,7 +188,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 45, + address: 48, target_symbol: 15, addend: 0, }, @@ -175,7 +196,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 61, + address: 64, target_symbol: 25, addend: 0, }, @@ -183,7 +204,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 65, + address: 68, target_symbol: 27, addend: 0, }, @@ -191,7 +212,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 70, + address: 76, target_symbol: 21, addend: 0, }, @@ -199,7 +220,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 94, + address: 100, target_symbol: 23, addend: 0, }, @@ -207,7 +228,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 110, + address: 116, target_symbol: 31, addend: 0, }, @@ -215,7 +236,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 114, + address: 120, target_symbol: 33, addend: 0, }, @@ -223,7 +244,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 130, + address: 136, target_symbol: 35, addend: 0, }, @@ -231,7 +252,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 134, + address: 140, target_symbol: 37, addend: 0, }, @@ -239,7 +260,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 138, + address: 144, target_symbol: 19, addend: 0, }, @@ -247,7 +268,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 142, + address: 148, target_symbol: 39, addend: 0, }, @@ -255,7 +276,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 147, + address: 156, target_symbol: 31, addend: 0, }, @@ -263,7 +284,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 171, + address: 180, target_symbol: 33, addend: 0, }, @@ -271,7 +292,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 175, + address: 184, target_symbol: 21, addend: 0, }, @@ -279,7 +300,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 199, + address: 208, target_symbol: 23, addend: 0, }, @@ -287,7 +308,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 215, + address: 224, target_symbol: 31, addend: 0, }, @@ -295,7 +316,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 219, + address: 228, target_symbol: 33, addend: 0, }, @@ -303,7 +324,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 235, + address: 244, target_symbol: 13, addend: 0, }, @@ -311,7 +332,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 239, + address: 248, target_symbol: 15, addend: 0, }, @@ -319,7 +340,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 255, + address: 264, target_symbol: 21, addend: 0, }, @@ -327,7 +348,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 259, + address: 268, target_symbol: 23, addend: 0, }, @@ -335,7 +356,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 263, + address: 272, target_symbol: 29, addend: 0, }, @@ -343,7 +364,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 267, + address: 276, target_symbol: 11, addend: 0, }, @@ -351,7 +372,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 271, + address: 280, target_symbol: 43, addend: 0, }, @@ -359,7 +380,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 275, + address: 284, target_symbol: 41, addend: 0, }, @@ -367,7 +388,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 279, + address: 288, target_symbol: 70, addend: 0, }, @@ -375,7 +396,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 283, + address: 292, target_symbol: 56, addend: 0, }, @@ -383,7 +404,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 287, + address: 296, target_symbol: 72, addend: 0, }, @@ -391,7 +412,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 291, + address: 300, target_symbol: 59, addend: 0, }, @@ -409,6 +430,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -423,6 +447,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -437,6 +464,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -451,6 +481,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -465,6 +498,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -479,6 +515,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -493,6 +532,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -507,6 +549,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -521,6 +566,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -535,6 +583,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -549,6 +600,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -563,6 +617,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -577,6 +634,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -591,6 +651,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -605,6 +668,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -619,6 +685,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -633,6 +702,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -647,6 +719,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -661,6 +736,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -669,12 +747,15 @@ expression: obj.sections id: ".text-combined", name: ".text", address: 0, - size: 268, + size: 320, kind: Code, data: SectionData( - 268, + 320, ), flags: FlagSet(Combined), + align: Some( + 16, + ), relocations: [ Relocation { flags: Coff( @@ -696,7 +777,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 29, + address: 43, target_symbol: 60, addend: 0, }, @@ -704,7 +785,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 48, + address: 62, target_symbol: 52, addend: 0, }, @@ -712,7 +793,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 68, + address: 84, target_symbol: 11, addend: 0, }, @@ -720,7 +801,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 84, + address: 100, target_symbol: 64, addend: 0, }, @@ -728,7 +809,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 104, + address: 124, target_symbol: 66, addend: 0, }, @@ -736,7 +817,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 124, + address: 156, target_symbol: 6, addend: 0, }, @@ -744,7 +825,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 134, + address: 166, target_symbol: 8, addend: 0, }, @@ -752,7 +833,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 145, + address: 177, target_symbol: 57, addend: 0, }, @@ -760,7 +841,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 153, + address: 185, target_symbol: 54, addend: 0, }, @@ -768,7 +849,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 172, + address: 219, target_symbol: 54, addend: 0, }, @@ -776,7 +857,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 191, + address: 238, target_symbol: 52, addend: 0, }, @@ -784,7 +865,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 218, + address: 267, target_symbol: 57, addend: 0, }, @@ -792,7 +873,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 237, + address: 286, target_symbol: 52, addend: 0, }, @@ -800,7 +881,7 @@ expression: obj.sections flags: Coff( 6, ), - address: 257, + address: 308, target_symbol: 68, addend: 0, }, @@ -808,7 +889,7 @@ expression: obj.sections flags: Coff( 20, ), - address: 262, + address: 313, target_symbol: 60, addend: 0, }, @@ -826,6 +907,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, @@ -840,6 +924,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -854,6 +941,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -868,6 +958,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -882,6 +975,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -896,6 +992,9 @@ expression: obj.sections 0, ), flags: FlagSet(Hidden), + align: Some( + 4, + ), relocations: [], line_info: {}, virtual_address: None, @@ -910,6 +1009,9 @@ expression: obj.sections 4, ), flags: FlagSet(), + align: Some( + 4, + ), relocations: [ Relocation { flags: Coff( @@ -933,6 +1035,9 @@ expression: obj.sections 0, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [], line_info: {}, virtual_address: None, diff --git a/objdiff-core/tests/snapshots/arch_x86__read_x86_jumptable.snap b/objdiff-core/tests/snapshots/arch_x86__read_x86_jumptable.snap index 7ca527b..c77cc99 100644 --- a/objdiff-core/tests/snapshots/arch_x86__read_x86_jumptable.snap +++ b/objdiff-core/tests/snapshots/arch_x86__read_x86_jumptable.snap @@ -201,6 +201,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None, @@ -215,6 +218,9 @@ Object { 96, ), flags: FlagSet(), + align: Some( + 16, + ), relocations: [ Relocation { flags: Coff( @@ -294,6 +300,9 @@ Object { 0, ), flags: FlagSet(), + align: Some( + 1, + ), relocations: [], line_info: {}, virtual_address: None,