When compiling with FEATURE_MTAB_SUPPORT disabled, the call to erase_mtab()
authorRob Landley <rob@landley.net>
Tue, 23 Aug 2005 20:03:17 +0000 (20:03 -0000)
committerRob Landley <rob@landley.net>
Tue, 23 Aug 2005 20:03:17 +0000 (20:03 -0000)
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...

util-linux/umount.c

index 6de71b4aba5b984c607172ddb874333d8454b7f5..dd072e7f6ae0a45fd8fabb79d00f1d33701de432 100644 (file)
@@ -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);
                }