On Wed, Mar 25, 2026 at 9:18 AM Andreas Schwab <[email protected]> wrote: > > > > On Mär 25 2026, Farid Zakaria wrote: > > > @@ -437,23 +446,45 @@ find_fde_tail (_Unwind_Ptr pc, > > /* Shouldn't happen. */ > > if (fde_count == 0) > > return NULL; > > - if ((((_Unwind_Ptr) p) & 3) == 0) > > + if ((((_Unwind_Ptr) p) & align_mask) == 0) > > { > > - struct fde_table { > > - signed initial_loc __attribute__ ((mode (SI))); > > - signed fde __attribute__ ((mode (SI))); > > - }; > > - const struct fde_table *table = (const struct fde_table *) p; > > + const unsigned char *table = p; > > size_t lo, hi, mid; > > _Unwind_Ptr data_base = (_Unwind_Ptr) hdr; > > fde *f; > > unsigned int f_enc, f_enc_size; > > _Unwind_Ptr range; > > > > + /* Read a signed field from the table. For sdata4 entries > > + these are mode (SI) (32-bit); for sdata8, mode (DI) (64-bit). > > + Use the packed unaligned union from unwind-pe.h types. */ > > + union table_entry { > > + signed s4 __attribute__ ((mode (SI))); > > + signed s8 __attribute__ ((mode (DI))); > > + } __attribute__ ((__packed__)); > > + > > + /* Read the initial_loc field at a given table index. */ > > +#define TABLE_LOC(i) \ > > + (is_sdata8 \ > > + ? (_Unwind_Ptr) ((const union table_entry *) \ > > + (table + (i) * entry_size))->s8 \ > > + : (_Unwind_Ptr) ((const union table_entry *) \ > > + (table + (i) * entry_size))->s4) > > + > > + /* Read the fde field at a given table index. */ > > +#define TABLE_FDE(i) \ > > + (is_sdata8 \ > > + ? (_Unwind_Ptr) ((const union table_entry *) \ > > + (table + (i) * entry_size \ > > + + field_size))->s8 \ > > + : (_Unwind_Ptr) ((const union table_entry *) \ > > + (table + (i) * entry_size \ > > + + field_size))->s4) > > Why does that need to use unaligned accesses when the table pointer is > guaranteed to be aligned?
Looks like you are right. I can remove it. I don't often submit `send-mail` patches... (this is my 2nd?) Should I wait for a few more reviewers before updating the patch series? > -- > Andreas Schwab, SUSE Labs, [email protected] > GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 > "And now for something completely different."
