#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*/ printf(char *, char *);
void usage(char *self) {
  printf("Usage: %s [OPTION...]\n"
         "\n"
         "This is a DNS server that returns the querying client's IP address "
         "as an \"A\"\nrecord for IPv4 clients and as an \"AAAA\" record for "
         "IPv6 clients.\n"
         "\n"
         "Exit statuses:\n"
         " 1     Fatal error encountered during initialization.\n"
         " 2     Fatal error encountered while attempting process a packet.\n"
         "\n"
         "Options:\n"
         " -h             Show this text and exit.\n"
         " -0             Bind to any interface available.\n"
         " -4             Only bind to IPv4 interfaces.\n"
         " -6             Only bind to IPv6 interfaces.\n"
         " -l HOSTNAME    Bind to associated with specified hostname.\n"
         " -p PORT        Bind to specific port. Defaults to 53.\n"
         " -u UID         After binding to network, call setuid(UID).\n",
         self);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [670 x i8] c"Usage: %s [OPTION...]\0A\0AThis is a DNS server that returns the querying client's IP address as an \22A\22\0Arecord for IPv4 clients and as an \22AAAA\22 record for IPv6 clients.\0A\0AExit statuses:\0A 1 Fatal error encountered during initialization.\0A 2 Fatal error encountered while attempting process a packet.\0A\0AOptions:\0A -h Show this text and exit.\0A -0 Bind to any interface available.\0A -4 Only bind to IPv4 interfaces.\0A -6 Only bind to IPv6 interfaces.\0A -l HOSTNAME Bind to associated with specified hostname.\0A -p PORT Bind to specific port. Defaults to 53.\0A -u UID After binding to network, call setuid(UID).\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([670 x i8], [670 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [670 x i8] c"Usage: %s [OPTION...]\0A\0AThis is a DNS server that returns the querying client's IP address as an \22A\22\0Arecord for IPv4 clients and as an \22AAAA\22 record for IPv6 clients.\0A\0AExit statuses:\0A 1 Fatal error encountered during initialization.\0A 2 Fatal error encountered while attempting process a packet.\0A\0AOptions:\0A -h Show this text and exit.\0A -0 Bind to any interface available.\0A -4 Only bind to IPv4 interfaces.\0A -6 Only bind to IPv6 interfaces.\0A -l HOSTNAME Bind to associated with specified hostname.\0A -p PORT Bind to specific port. Defaults to 53.\0A -u UID After binding to network, call setuid(UID).\0A\00"
define void @usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([670 x i8], [670 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}