As already noticed this is actually on purpose to align pointer on addr_t size.
On Thu, 11 Apr 2019, 20:04 Milo Wenxiang Niu, <printer...@aliyun.com> wrote: > From: Milo Wenxiang X Niu <printer...@aliyun.com> > > It's just to remove the common factor: "sizeof (grub_addr_t)" from the > numerator and denominator of the fractional expression of next var. > Let me explain it: > Shortly: > H: struct grub_module_header ; > B: grub_uint32_t ; > A: grub_addr_t; > > Thus, original expression can be expressed as: > var = (H *)((B*)var) + ( offset_exp )) > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > (((H*)var)->size + sizeof(A) - 1) sizeof(A) | > offset_exp = --------------------------------- * ----------- | > sizeof(A) sizeof(B) | > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > Remove the common factor "sizeof(A)" of fractional offset_exp, we got the > result. > offset_exp_new = ((H*)->size + sizeof(A) - 1) / sizeof(B) > = ((struct grub_module_header *) var)->size + > sizeof (grub_addr_t) -1) / sizeof (grub_uint32_t) > > so: > var =(H *)(((B*)var) + ( (((H*)var)->size + sizeof(A) - 1) / sizeof(B) )) > That's what I do. > > Still, the new offset express is meaningfull: > *numerator: ((struct grub_module_header *) var)->size + sizeof > (grub_addr_t) -1) > it present the offset value united by byte. > *denominator: sizeof (grub_uint32_t) > it's means "struct grub_module_header" aligned by > sizeof(grub_uint32_t) > --- > include/grub/kernel.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/grub/kernel.h b/include/grub/kernel.h > index 133a37c..b257224 100644 > --- a/include/grub/kernel.h > +++ b/include/grub/kernel.h > @@ -104,7 +104,7 @@ extern grub_addr_t EXPORT_VAR (grub_modbase); > var && (grub_addr_t) var \ > < (grub_modbase + (((struct grub_module_info *) > grub_modbase)->size)); \ > var = (struct grub_module_header *) \ > - (((grub_uint32_t *) var) + ((((struct grub_module_header *) > var)->size + sizeof (grub_addr_t) - 1) / sizeof (grub_addr_t)) * (sizeof > (grub_addr_t) / sizeof (grub_uint32_t)))) > + (((grub_uint32_t *) var) + ((((struct grub_module_header *) > var)->size + sizeof (grub_addr_t) - 1) / sizeof (grub_uint32_t)))) > > grub_addr_t grub_modules_get_end (void); > > -- > 1.8.3.1 > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel