From: Rob Landley Date: Tue, 23 Aug 2005 20:03:17 +0000 (-0000) Subject: When compiling with FEATURE_MTAB_SUPPORT disabled, the call to erase_mtab() X-Git-Tag: 1_1_0~813 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=f4c684a1efcf8a602d0803c889aba610b9a5ddb8;p=oweals%2Fbusybox.git When compiling with FEATURE_MTAB_SUPPORT disabled, the call to erase_mtab() can never be made because useMtab is initialized to 0, and all the other assignments of that variable assign 0 to it. Any compiler that can perform simple constant propogation on local variables will optimize away if statements testing against that variable, thus the call to erase_mtab() will never be made. When compiling for arm using gcc 3.3.3 with FEATURE_MTAB_SUPPORT disabled, the linker complains that it can't find erase_mtab(). The arm optimizer isn't exactly the brightest member of the family, and apparently needs to be hit over the head with a hammer to get its' attention... --- diff --git a/util-linux/umount.c b/util-linux/umount.c index 6de71b4ab..dd072e7f6 100644 --- a/util-linux/umount.c +++ b/util-linux/umount.c @@ -116,7 +116,9 @@ extern int umount_main(int argc, char **argv) del_loop(m->device); if(curstat) { - if(useMtab && m) erase_mtab(m->dir); + /* Yes, the ENABLE is redundant here, but the optimizer for ARM + * can't do simple constant propogation in local variables... */ + if(ENABLE_FEATURE_MTAB_SUPPORT && useMtab && m) erase_mtab(m->dir); status = EXIT_FAILURE; bb_perror_msg("Couldn't umount %s\n", path); }