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