123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #include "libbb.h"
- #include <sys/personality.h>
- #ifndef ADDR_NO_RANDOMIZE
- # define ADDR_NO_RANDOMIZE 0x0040000
- #endif
- int setarch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
- int setarch_main(int argc UNUSED_PARAM, char **argv)
- {
- unsigned opts;
- unsigned long pers;
-
- if (ENABLE_SETARCH && applet_name[0] == 's'
- && argv[1] && is_prefixed_with(argv[1], "linux")
- ) {
- argv++;
- applet_name = argv[0];
- }
- if ((!ENABLE_SETARCH && !ENABLE_LINUX32) || applet_name[5] == '6')
-
- pers = PER_LINUX;
- else
- if ((!ENABLE_SETARCH && !ENABLE_LINUX64) || applet_name[5] == '3')
-
- pers = PER_LINUX32;
- else
- bb_show_usage();
- opts = getopt32(argv, "+R");
- if (opts)
- pers |= ADDR_NO_RANDOMIZE;
-
- if (personality(pers) < 0)
- bb_perror_msg_and_die("personality(0x%lx)", pers);
- argv += optind;
- if (!argv[0])
- (--argv)[0] = (char*)"/bin/sh";
-
- BB_EXECVP_or_die(argv);
- }
|