#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ EXIT_FAILURE;
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char *, char *, char *,
                           char *);
int /*<<< orphan*/ stderr;
void usage(void) {
  fprintf(
      stderr,
      "usage: %s <-S|-R|-C> [options] [file(s)]\n\n"
      "OPTIONS\n"
      "  -S                    generate backup data from file(s), dump to "
      "stdout\n"
      "  -R                    restore permissions from backup through stdin\n"
      "  -C                    check current file permissions against "
      "backup\n\n"
      "  -r                    be recursive (save mode only)\n"
      "  -v                    be verbose (restore mode only)\n"
      "  -m <num>              max open file descriptors when being recursive "
      "(default is 64)\n"
      "  -V                    print version and exit\n\n"
      "EXAMPLES\n"
      "  create backup data:          %s -S -r / > permbackup.db\n"
      "  check permission integrity:  %s -C < permbackup.db\n"
      "  restore from backup:         %s -R < permbackup.db\n\n",
      "pbackup", "pbackup", "pbackup", "pbackup");
  exit(EXIT_FAILURE);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
lea    0x1171(%rip),%r9
mov    %r9,%rdx
mov    %r9,%rcx
mov    %r9,%r8
call   1030 <fprintf@plt>
mov    0x2e88(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
lea    0xecf(%rip),%rsi
lea    0x1174(%rip),%rcx
mov    %rcx,%rdx
mov    %rcx,%r8
mov    %rcx,%r9
call   1030 <fprintf@plt>
mov    0x2e8b(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [684 x i8] c"usage: %s <-S|-R|-C> [options] [file(s)]\0A\0AOPTIONS\0A -S generate backup data from file(s), dump to stdout\0A -R restore permissions from backup through stdin\0A -C check current file permissions against backup\0A\0A -r be recursive (save mode only)\0A -v be verbose (restore mode only)\0A -m <num> max open file descriptors when being recursive (default is 64)\0A -V print version and exit\0A\0AEXAMPLES\0A create backup data: %s -S -r / > permbackup.db\0A check permission integrity: %s -C < permbackup.db\0A restore from backup: %s -R < permbackup.db\0A\0A\00"
@.str.1 = [8 x i8] c"pbackup\00"
@EXIT_FAILURE = global i32 0
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([684 x i8], [684 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
%3 = load i32, i32* @EXIT_FAILURE
%4 = call i32 @exit(i32 %3)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [684 x i8] c"usage: %s <-S|-R|-C> [options] [file(s)]\0A\0AOPTIONS\0A -S generate backup data from file(s), dump to stdout\0A -R restore permissions from backup through stdin\0A -C check current file permissions against backup\0A\0A -r be recursive (save mode only)\0A -v be verbose (restore mode only)\0A -m <num> max open file descriptors when being recursive (default is 64)\0A -V print version and exit\0A\0AEXAMPLES\0A create backup data: %s -S -r / > permbackup.db\0A check permission integrity: %s -C < permbackup.db\0A restore from backup: %s -R < permbackup.db\0A\0A\00"
@.str.1 = [8 x i8] c"pbackup\00"
@EXIT_FAILURE = global i32 0
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([684 x i8], [684 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
%3 = load i32, i32* @EXIT_FAILURE
%4 = tail call i32 @exit(i32 %3)
unreachable
}