LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/file.c
// Function: file_write
FileError file_write(File * file, const void * buf, size_t size, size_t * count)
{
	size_t s;

	if((s = fwrite(buf, size, *count, file->fp)) < *count)
	{
		*count = s;
		return _file_error(file, errno);
	}
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rax
movq (%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
callq 0x4800
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x8c09
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
callq 0x40d0
movq -0x38(%rbp), %rdi
movl (%rax), %esi
callq 0x8910
movl %eax, -0x4(%rbp)
jmp 0x8c10
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_new
Hash * hash_new(HashFunc func, HashCompare compare)
{
	Hash * hash;

	if(compare == NULL)
	{
		error_set_code(1, "%s", "Invalid comparison function");
		return NULL;
	}
	if((hash = (Hash *)object_new(sizeof(*hash))) == NULL)
		return NULL;
	if((hash->entries = _hashentryarray_new()) == NULL)
	{
		object_delete(hash);
		return NULL;
	}
	hash->func = func;
	hash->compare = compare;
	return hash;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x8cab
movl $0x1, %edi
leaq 0x73cb(%rip), %rsi      # 0x1005e
leaq 0x74e0(%rip), %rdx      # 0x1017a
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
jmp 0x8d0e
movl $0x18, %edi
callq 0x4640
movq %rax, -0x20(%rbp)
cmpq $0x0, %rax
jne 0x8cc9
movq $0x0, -0x8(%rbp)
jmp 0x8d0e
callq 0x8d20
movq -0x20(%rbp), %rcx
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
jne 0x8cef
movq -0x20(%rbp), %rdi
callq 0x44a0
movq $0x0, -0x8(%rbp)
jmp 0x8d0e
movq -0x10(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_new_copy
Hash * hash_new_copy(Hash const * from)
{
	Hash * hash;

	if((hash = (Hash *)object_new(sizeof(*from))) == NULL)
		return NULL;
	if((hash->entries = array_new_copy(from->entries)) == NULL)
	{
		object_delete(hash);
		return NULL;
	}
	hash->func = from->func;
	hash->compare = from->compare;
	return hash;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movl $0x18, %edi
callq 0x4640
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
jne 0x8d5a
movq $0x0, -0x8(%rbp)
jmp 0x8dae
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x4760
movq -0x18(%rbp), %rcx
movq %rax, 0x10(%rcx)
cmpq $0x0, %rax
jne 0x8d88
movq -0x18(%rbp), %rdi
callq 0x44a0
movq $0x0, -0x8(%rbp)
jmp 0x8dae
movq -0x10(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_func_string
unsigned int hash_func_string(void const * key)
{
	String const * str = (String const *)key;
	size_t i;
	unsigned int hash = 0;

	for(i = 0; i < sizeof(hash) && str[i] != '\0'; i++)
		hash |= str[i] << (i << 3);
	return hash;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x10(%rbp)
movl $0x0, -0x1c(%rbp)
movq $0x0, -0x18(%rbp)
xorl %eax, %eax
cmpq $0x4, -0x18(%rbp)
movb %al, -0x1d(%rbp)
jae 0x8e30
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
setne %al
movb %al, -0x1d(%rbp)
movb -0x1d(%rbp), %al
testb $0x1, %al
jne 0x8e39
jmp 0x8e63
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %eax
movq -0x18(%rbp), %rcx
shlq $0x3, %rcx
shll %cl, %eax
orl -0x1c(%rbp), %eax
movl %eax, -0x1c(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x8e0f
movl -0x1c(%rbp), %eax
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_get
void * hash_get(Hash const * hash, void const * key)
{
	Array const * entries = (Array const *)hash->entries;
	unsigned int h;
	size_t i;
	HashEntry * he;

	h = (hash->func != NULL) ? hash->func(key) : 0;
	for(i = array_count(entries); i > 0; i--)
	{
		if((he = (HashEntry *)array_get(entries, i - 1)) == NULL)
			return NULL;
		if(he->hash != h)
			continue;
		if(hash->compare(he->key, key) == 0)
			return he->value;
	}
	error_set_code(1, "%s", "Key not found");
	return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x8f08
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rdi
callq *%rax
movl %eax, -0x3c(%rbp)
jmp 0x8f0f
xorl %eax, %eax
movl %eax, -0x3c(%rbp)
jmp 0x8f0f
movl -0x3c(%rbp), %eax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rdi
callq 0x4250
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jbe 0x8f94
movq -0x20(%rbp), %rdi
movq -0x30(%rbp), %rsi
subq $0x1, %rsi
callq 0x45e0
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0x8f4e
movq $0x0, -0x8(%rbp)
jmp 0x8fb6
movq -0x38(%rbp), %rax
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
je 0x8f5b
jmp 0x8f86
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x38(%rbp), %rcx
movq 0x8(%rcx), %rdi
movq -0x18(%rbp), %rsi
callq *%rax
cmpl $0x0, %eax
jne 0x8f84
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x8fb6
jmp 0x8f86
movq -0x30(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x8f22
movl $0x1, %edi
leaq 0x70be(%rip), %rsi      # 0x1005e
leaq 0x71ef(%rip), %rdx      # 0x10196
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_get_key
void const * hash_get_key(Hash const * hash, void const * key)
{
	Array const * entries = (Array const *)hash->entries;
	unsigned int h;
	size_t i;
	HashEntry const * he;

	h = (hash->func != NULL) ? hash->func(key) : 0;
	for(i = array_count(entries); i > 0; i--)
	{
		if((he = (HashEntry const *)array_get(entries, i - 1)) == NULL)
			return NULL;
		if(he->hash != h)
			continue;
		if(hash->compare(he->key, key) == 0)
			return he->key;
	}
	error_set_code(1, "%s", "Key not found");
	return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x8ff8
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rdi
callq *%rax
movl %eax, -0x3c(%rbp)
jmp 0x8fff
xorl %eax, %eax
movl %eax, -0x3c(%rbp)
jmp 0x8fff
movl -0x3c(%rbp), %eax
movl %eax, -0x24(%rbp)
movq -0x20(%rbp), %rdi
callq 0x4250
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jbe 0x9084
movq -0x20(%rbp), %rdi
movq -0x30(%rbp), %rsi
subq $0x1, %rsi
callq 0x45e0
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0x903e
movq $0x0, -0x8(%rbp)
jmp 0x90a6
movq -0x38(%rbp), %rax
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
je 0x904b
jmp 0x9076
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x38(%rbp), %rcx
movq 0x8(%rcx), %rdi
movq -0x18(%rbp), %rsi
callq *%rax
cmpl $0x0, %eax
jne 0x9074
movq -0x38(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x90a6
jmp 0x9076
movq -0x30(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x30(%rbp)
jmp 0x9012
movl $0x1, %edi
leaq 0x6fce(%rip), %rsi      # 0x1005e
leaq 0x70ff(%rip), %rdx      # 0x10196
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_set
int hash_set(Hash * hash, void const * key, void * value)
{
	Array * entries = (Array *)hash->entries;
	unsigned int h;
	size_t i;
	size_t cnt;
	HashEntry he;
	HashEntry * p;

	h = (hash->func != NULL) ? hash->func(key) : 0;
	for(i = 0, cnt = array_count(entries); i < cnt; i++)
	{
		if((p = (HashEntry *)array_get(entries, i)) == NULL)
			return 1;
		if(p->hash != h)
			continue;
		if(hash->compare(p->key, key) != 0)
			continue;
		if(value == NULL)
			return (array_remove_pos(entries, i) == 0) ? 0 : 1;
		return _hashentry_set_value(p, value);
	}
	if(value == NULL)
		return 0;
	_hashentry_init(&he, hash->func, key, value);
	return (array_append(entries, &he) == 0) ? 0 : 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0x90ec
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rdi
callq *%rax
movl %eax, -0x64(%rbp)
jmp 0x90f3
xorl %eax, %eax
movl %eax, -0x64(%rbp)
jmp 0x90f3
movl -0x64(%rbp), %eax
movl %eax, -0x2c(%rbp)
movq $0x0, -0x38(%rbp)
movq -0x28(%rbp), %rdi
callq 0x4250
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rax
cmpq -0x40(%rbp), %rax
jae 0x91b4
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x45e0
movq %rax, -0x60(%rbp)
cmpq $0x0, %rax
jne 0x913f
movl $0x1, -0x4(%rbp)
jmp 0x91fb
movq -0x60(%rbp), %rax
movl (%rax), %eax
cmpl -0x2c(%rbp), %eax
je 0x914c
jmp 0x91a3
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x60(%rbp), %rcx
movq 0x8(%rcx), %rdi
movq -0x18(%rbp), %rsi
callq *%rax
cmpl $0x0, %eax
je 0x9169
jmp 0x91a3
cmpq $0x0, -0x20(%rbp)
jne 0x9191
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x4590
movl %eax, %edx
movl $0x1, %eax
xorl %ecx, %ecx
cmpl $0x0, %edx
cmovel %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x91fb
movq -0x60(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9210
movl %eax, -0x4(%rbp)
jmp 0x91fb
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x910e
cmpq $0x0, -0x20(%rbp)
jne 0x91c4
movl $0x0, -0x4(%rbp)
jmp 0x91fb
movq -0x10(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
leaq -0x58(%rbp), %rdi
callq 0x9230
movq -0x28(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x4290
movl %eax, %edx
movl $0x1, %eax
xorl %ecx, %ecx
cmpl $0x0, %edx
cmovel %ecx, %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_foreach
void hash_foreach(Hash const * hash, HashForeach func, void * data)
{
	Array const * entries = (Array const *)hash->entries;
	struct funcdata fd;

	fd.hash = hash;
	fd.func = func;
	fd.data = data;
	array_foreach(entries, _hash_foreach, &fd);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
leaq 0x1d(%rip), %rsi        # 0x92f0
leaq -0x38(%rbp), %rdx
callq 0x4030
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/hash.c
// Function: hash_reset
int hash_reset(Hash * hash)
{
	Array * entries = (Array *)hash->entries;

	while(array_count(entries))
		if(array_remove_pos(entries, 0) != 0)
			return 1;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x4250
cmpq $0x0, %rax
je 0x9384
movq -0x18(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4590
cmpl $0x0, %eax
je 0x9382
movl $0x1, -0x4(%rbp)
jmp 0x938b
jmp 0x9358
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/mutator.c
// Function: mutator_set
int mutator_set(Mutator * mutator, String const * key, void * value)
{
	int ret;
	String * k;
	String * oldk;

	/* look for the former key */
	if((oldk = (String *)hash_get_key(mutator, key)) == NULL)
	{
		if(value == NULL)
			/* there is nothing to do */
			return 0;
		/* allocate the new key */
		if((k = string_new(key)) == NULL)
			return -1;
		key = k;
	}
	else
	{
		if(value != NULL)
			oldk = NULL;
		k = NULL;
	}
	if((ret = hash_set(mutator, key, value)) != 0)
	{
		error_set("%s: %s", key, "Could not set the value");
		string_delete(k);
	}
	else
		/* free the former key if removed */
		string_delete(oldk);
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x41e0
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0x9514
cmpq $0x0, -0x20(%rbp)
jne 0x94ee
movl $0x0, -0x4(%rbp)
jmp 0x9577
movq -0x18(%rbp), %rdi
callq 0x41f0
movq %rax, -0x30(%rbp)
cmpq $0x0, %rax
jne 0x950a
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9577
movq -0x30(%rbp), %rax
movq %rax, -0x18(%rbp)
jmp 0x952b
cmpq $0x0, -0x20(%rbp)
je 0x9523
movq $0x0, -0x38(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x4500
movl %eax, -0x24(%rbp)
cmpl $0x0, %eax
je 0x9568
movq -0x18(%rbp), %rsi
leaq 0x6b12(%rip), %rdi      # 0x10061
leaq 0x6c4e(%rip), %rdx      # 0x101a4
movb $0x0, %al
callq 0x45c0
movq -0x30(%rbp), %rdi
callq 0x4260
jmp 0x9571
movq -0x38(%rbp), %rdi
callq 0x4260
movl -0x24(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x40, %rsp
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/object.c
// Function: object_new
Object * object_new(size_t size)
{
	void * object;

	if(size == 0)
	{
		error_set_code(-EINVAL, "%s", strerror(EINVAL));
		return NULL;
	}
	if((object = malloc(size)) == NULL)
	{
		error_set_code(-errno, "%s", strerror(errno));
		return NULL;
	}
#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s() => %p\n", __func__, object);
#endif
	return object;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x961d
movl $0x16, %edi
callq 0x4840
movq %rax, %rdx
movl $0xffffffea, %edi       # imm = 0xFFFFFFEA
leaq 0x6a52(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
jmp 0x9671
movq -0x10(%rbp), %rdi
callq 0x4530
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
jne 0x9669
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x1c(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x1c(%rbp), %edi
movq %rax, %rdx
leaq 0x6a06(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
jmp 0x9671
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/object.c
// Function: object_resize
int object_resize(Object ** object, size_t size)
{
	void * p;

	if((p = realloc(*object, size)) == NULL)
		return error_set_code(-errno, "%s", strerror(errno));
	*object = p;
#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(&%p, %zu) => %p\n", __func__, *object, size,
			p);
#endif
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rsi
callq 0x4620
movq %rax, -0x20(%rbp)
cmpq $0x0, %rax
jne 0x96fe
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x24(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x24(%rbp), %edi
movq %rax, %rdx
leaq 0x696c(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movl %eax, -0x4(%rbp)
jmp 0x9710
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_scan_filter
int parser_scan_filter(Parser * parser)
{
	int c = parser->last;
	size_t i;
	ParserFilterData * pfd;
	int l;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(%p)\n", __func__, (void *)parser);
#endif
	if(parser->lookahead)
		parser->lookahead--;
	else if(parser->scanner(&c, parser) != 0)
	{
		parser->error = 1;
		return EOF;
	}
	for(i = 0; i < parser->filters_cnt; i++)
	{
		pfd = &parser->filters[i];
		if((l = pfd->filter(&c, pfd->data)) < 0)
		{
			parser->error = 1;
			return EOF;
		}
		parser->lookahead += l;
	}
	parser->last = c;
	return c;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl 0x34(%rax), %eax
movl %eax, -0x14(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x38(%rax)
je 0x974f
movq -0x10(%rbp), %rax
movl 0x38(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x38(%rax)
jmp 0x977f
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x10(%rbp), %rsi
leaq -0x14(%rbp), %rdi
callq *%rax
cmpl $0x0, %eax
je 0x977d
movq -0x10(%rbp), %rax
movl $0x1, 0x28(%rax)
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9808
jmp 0x977f
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jae 0x97f8
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
movq 0x8(%rcx), %rsi
leaq -0x14(%rbp), %rdi
callq *%rax
movl %eax, -0x2c(%rbp)
cmpl $0x0, %eax
jge 0x97dd
movq -0x10(%rbp), %rax
movl $0x1, 0x28(%rax)
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9808
movl -0x2c(%rbp), %ecx
movq -0x10(%rbp), %rax
addl 0x38(%rax), %ecx
movl %ecx, 0x38(%rax)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x9787
movl -0x14(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x34(%rax)
movl -0x14(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_new
Parser * parser_new(String const * pathname)
{
	Parser * parser;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, pathname);
#endif
	if((parser = _new_do(_parser_scanner_file)) == NULL)
		return NULL;
	if((parser->filename = string_new(pathname)) == NULL)
		error_set_code(-errno, "%s", strerror(errno));
	if((parser->fp = fopen(pathname, "r")) == NULL)
		error_set_code(-errno, "%s: %s", pathname, strerror(errno));
	if(parser->filename == NULL || parser->fp == NULL)
	{
		parser_delete(parser);
		return NULL;
	}
	return parser;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
leaq 0x1ed(%rip), %rdi       # 0x9a20
callq 0x9930
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
jne 0x984f
movq $0x0, -0x8(%rbp)
jmp 0x991d
movq -0x10(%rbp), %rdi
callq 0x41f0
movq -0x18(%rbp), %rcx
movq %rax, (%rcx)
cmpq $0x0, %rax
jne 0x9894
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x1c(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x1c(%rbp), %edi
movq %rax, %rdx
leaq 0x67d1(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq -0x10(%rbp), %rdi
leaq 0x6833(%rip), %rsi      # 0x100d2
callq 0x4740
movq -0x18(%rbp), %rcx
movq %rax, 0x8(%rcx)
cmpq $0x0, %rax
jne 0x98ed
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x2c(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x2c(%rbp), %edi
movq -0x28(%rbp), %rdx
movq %rax, %rcx
leaq 0x677b(%rip), %rsi      # 0x10061
movb $0x0, %al
callq 0x4630
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0x9902
movq -0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x9915
movq -0x18(%rbp), %rdi
callq 0x4890
movq $0x0, -0x8(%rbp)
jmp 0x991d
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: new_do
static Parser * _new_do(ParserFilter scanner)
{
	Parser * parser;

	if((parser = (Parser *)object_new(sizeof(*parser))) == NULL)
		return NULL;
	parser->filename = NULL;
	parser->fp = NULL;
	parser->string = NULL;
	parser->string_cnt = 0;
	parser->string_pos = 0;
	parser->error = 0;
	parser->line = 1;
	parser->col = 1;
	parser->last = EOF;
	parser->lookahead = 0;
	parser->scanner = scanner;
	parser->filters = NULL;
	parser->filters_cnt = 0;
	parser->callbacks = NULL;
	parser->callbacks_cnt = 0;
	return parser;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movl $0x68, %edi
callq 0x4640
movq %rax, -0x18(%rbp)
cmpq $0x0, %rax
jne 0x995d
movq $0x0, -0x8(%rbp)
jmp 0x9a13
movq -0x18(%rbp), %rax
movq $0x0, (%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x18(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x18(%rbp), %rax
movl $0x0, 0x28(%rax)
movq -0x18(%rbp), %rax
movl $0x1, 0x2c(%rax)
movq -0x18(%rbp), %rax
movl $0x1, 0x30(%rax)
movq -0x18(%rbp), %rax
movl $0xffffffff, 0x34(%rax) # imm = 0xFFFFFFFF
movq -0x18(%rbp), %rax
movl $0x0, 0x38(%rax)
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x48(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x50(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x58(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x60(%rax)
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_scanner_file
static int _parser_scanner_file(int * c, void * data)
{
	Parser * parser = (Parser *)data;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
	if(parser->last == '\n')
	{
		parser->line++;
		parser->col = 1;
	}
	else if(parser->last != EOF)
		parser->col++;
	if((*c = fgetc(parser->fp)) == EOF
			&& !feof(parser->fp))
		return -1;
	parser->last = *c;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0xa, 0x34(%rax)
jne 0x9a5c
movq -0x20(%rbp), %rax
movl 0x2c(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x2c(%rax)
movq -0x20(%rbp), %rax
movl $0x1, 0x30(%rax)
jmp 0x9a75
movq -0x20(%rbp), %rax
cmpl $-0x1, 0x34(%rax)
je 0x9a73
movq -0x20(%rbp), %rax
movl 0x30(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x30(%rax)
jmp 0x9a75
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x4380
movq -0x10(%rbp), %rcx
movl %eax, (%rcx)
cmpl $-0x1, %eax
jne 0x9aa8
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x4470
cmpl $0x0, %eax
jne 0x9aa8
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9abc
movq -0x10(%rbp), %rax
movl (%rax), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x34(%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_delete
int parser_delete(Parser * parser)
{
	int ret = 0;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(%p) \"%s\"\n", __func__, (void *)parser,
			parser->filename);
#endif
	if(parser->fp != NULL
			&& fclose(parser->fp) != 0)
		ret = error_set_code(-errno, "%s: %s", parser->filename,
				strerror(errno));
	string_delete(parser->filename);
	free(parser->string);
	free(parser->filters);
	free(parser->callbacks);
	object_delete(parser);
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movl $0x0, -0xc(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x9b41
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x4240
cmpl $0x0, %eax
je 0x9b41
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x1c(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x18(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x1c(%rbp), %edi
movq -0x18(%rbp), %rdx
movq %rax, %rcx
leaq 0x652a(%rip), %rsi      # 0x10061
movb $0x0, %al
callq 0x4630
movl %eax, -0xc(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x4260
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x4080
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
callq 0x4080
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0x4080
movq -0x8(%rbp), %rdi
callq 0x44a0
movl -0xc(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_new_string
Parser * parser_new_string(String const * string, size_t length)
{
	Parser * parser;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(\"%s\", %lu)\n", __func__, string, length);
#endif
	if((parser = _new_do(_parser_scanner_string)) == NULL)
		return NULL;
	parser->string = (String *)malloc(length);
	parser->string_cnt = length;
	if(parser->string == NULL && length != 0)
	{
		error_set_code(-errno, "%s", strerror(errno));
		parser_delete(parser);
		return NULL;
	}
	memcpy(parser->string, string, length);
	return parser;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
leaq 0xb9(%rip), %rdi        # 0x9c60
callq 0x9930
movq %rax, -0x20(%rbp)
cmpq $0x0, %rax
jne 0x9bc3
movq $0x0, -0x8(%rbp)
jmp 0x9c54
movq -0x18(%rbp), %rdi
callq 0x4530
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x9c37
cmpq $0x0, -0x18(%rbp)
je 0x9c37
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x24(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x24(%rbp), %edi
movq %rax, %rdx
leaq 0x6441(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq -0x20(%rbp), %rdi
callq 0x4890
movq $0x0, -0x8(%rbp)
jmp 0x9c54
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x44b0
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_scanner_string
static int _parser_scanner_string(int * c, void * data)
{
	Parser * parser = (Parser *)data;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
	if(parser->last == '\n')
	{
		parser->line++;
		parser->col = 1;
	}
	else if(parser->last != EOF)
		parser->col++;
	if(parser->string_pos == parser->string_cnt)
		*c = EOF;
	else
		*c = parser->string[parser->string_pos];
	parser->string_pos++;
	parser->last = *c;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpl $0xa, 0x34(%rax)
jne 0x9c98
movq -0x18(%rbp), %rax
movl 0x2c(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x2c(%rax)
movq -0x18(%rbp), %rax
movl $0x1, 0x30(%rax)
jmp 0x9cb1
movq -0x18(%rbp), %rax
cmpl $-0x1, 0x34(%rax)
je 0x9caf
movq -0x18(%rbp), %rax
movl 0x30(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x30(%rax)
jmp 0x9cb1
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jne 0x9ccf
movq -0x8(%rbp), %rax
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
jmp 0x9ce9
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x20(%rcx), %rcx
movsbl (%rax,%rcx), %ecx
movq -0x8(%rbp), %rax
movl %ecx, (%rax)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rax
movl (%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x34(%rax)
xorl %eax, %eax
popq %rbp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_get_token
int parser_get_token(Parser * parser, Token ** token)
{
	int ret = 0; /* XXX not sure */
	size_t i;
	ParserCallbackData * pcd;

	if((*token = token_new(parser->filename, parser->line, parser->col))
			== NULL)
		return -1;
	if(parser->last == EOF
			&& parser_scan_filter(parser) == EOF
			&& parser->error != 0)
	{
		token_delete(*token);
		*token = NULL;
		return -1;
	}
#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s() %c\n", __func__, parser->last);
#endif
	for(i = 0; i < parser->callbacks_cnt; i++)
	{
		pcd = &parser->callbacks[i];
		if((ret = pcd->callback(parser, *token, parser->last,
						pcd->data)) <= 0)
			break;
	}
	if(ret == 0 && i != parser->callbacks_cnt)
		return 0; /* there is a token and no error */
	token_delete(*token);
	*token = NULL;
	return (ret >= 0 && parser->last == EOF) ? 0 : -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl $0x0, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movl 0x2c(%rax), %esi
movq -0x10(%rbp), %rax
movl 0x30(%rax), %edx
callq 0x48d0
movq -0x18(%rbp), %rcx
movq %rax, (%rcx)
cmpq $0x0, %rax
jne 0x9d7a
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9e89
movq -0x10(%rbp), %rax
cmpl $-0x1, 0x34(%rax)
jne 0x9dbf
movq -0x10(%rbp), %rdi
callq 0x44d0
cmpl $-0x1, %eax
jne 0x9dbf
movq -0x10(%rbp), %rax
cmpl $0x0, 0x28(%rax)
je 0x9dbf
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0x40a0
movq -0x18(%rbp), %rax
movq $0x0, (%rax)
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x9e89
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x60(%rcx), %rax
jae 0x9e29
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x28(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rcx
movq (%rcx), %rsi
movq -0x10(%rbp), %rcx
movl 0x34(%rcx), %edx
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %rcx
callq *%rax
movl %eax, -0x1c(%rbp)
cmpl $0x0, %eax
jg 0x9e19
jmp 0x9e29
jmp 0x9e1b
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x9dc7
cmpl $0x0, -0x1c(%rbp)
jne 0x9e46
movq -0x28(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x60(%rcx), %rax
je 0x9e46
movl $0x0, -0x4(%rbp)
jmp 0x9e89
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0x40a0
movq -0x18(%rbp), %rax
movq $0x0, (%rax)
xorl %eax, %eax
cmpl $0x0, -0x1c(%rbp)
movb %al, -0x31(%rbp)
jl 0x9e76
movq -0x10(%rbp), %rax
cmpl $-0x1, 0x34(%rax)
sete %al
movb %al, -0x31(%rbp)
movb -0x31(%rbp), %dl
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
xorl %ecx, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_add_callback
int parser_add_callback(Parser * parser, ParserCallback callback, void * data)
{
	ParserCallbackData * p;

	if((p = (ParserCallbackData *)realloc(parser->callbacks,
					sizeof(*p) * (parser->callbacks_cnt
						+ 1))) == NULL)
		return 1;
	parser->callbacks = p;
	p = &parser->callbacks[parser->callbacks_cnt++];
	p->callback = callback;
	p->data = data;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rsi
addq $0x1, %rsi
shlq $0x4, %rsi
callq 0x4620
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0x9ee4
movl $0x1, -0x4(%rbp)
jmp 0x9f34
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x10(%rbp), %rdx
movq 0x60(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x60(%rdx)
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_add_filter
int parser_add_filter(Parser * parser, ParserFilter filter, void * data)
{
	ParserFilterData * p = parser->filters;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(%p, %p, %p)\n", __func__, (void *)parser,
			(void *)filter, (void *)data);
#endif
	if((p = (ParserFilterData *)realloc(p, sizeof(*p) * (parser->filters_cnt
						+ 1))) == NULL)
		return 1;
	parser->filters = p;
	p = &parser->filters[parser->filters_cnt++];
	p->filter = filter;
	p->data = data;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rsi
addq $0x1, %rsi
shlq $0x4, %rsi
callq 0x4620
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0x9f8c
movl $0x1, -0x4(%rbp)
jmp 0x9fdc
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x10(%rbp), %rdx
movq 0x50(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x50(%rdx)
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_remove_callback
int parser_remove_callback(Parser * parser, ParserCallback callback)
	/* XXX untested */
{
	size_t i;
	ParserCallbackData * p;

	for(i = 0; i < parser->callbacks_cnt; i++)
		if(parser->callbacks[i].callback == callback)
			break;
	if(i != parser->callbacks_cnt)
		return 1;
	p = &parser->callbacks[i];
#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(): memmove(%p, %p, %lu)\n", __func__,
			(void *)p, (void *)(p + 1),
			sizeof(*p) * (parser->callbacks_cnt - i));
#endif
	memmove(p, p + 1, sizeof(*p) * (parser->callbacks_cnt - i));
	parser->callbacks_cnt--;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x60(%rcx), %rax
jae 0xa044
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
cmpq -0x18(%rbp), %rax
jne 0xa034
jmp 0xa044
jmp 0xa036
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0xa008
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x60(%rcx), %rax
je 0xa05b
movl $0x1, -0x4(%rbp)
jmp 0xa0aa
movq -0x10(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movq -0x28(%rbp), %rsi
addq $0x10, %rsi
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rdx
subq -0x20(%rbp), %rdx
shlq $0x4, %rdx
callq 0x46a0
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x60(%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/parser.c
// Function: parser_remove_filter
int parser_remove_filter(Parser * parser, ParserFilter filter)
	/* XXX untested */
{
	size_t i;
	ParserFilterData * p;

	for(i = 0; i < parser->filters_cnt; i++)
		if(parser->filters[i].filter == filter)
			break;
	if(i != parser->filters_cnt)
		return 1;
	p = &parser->filters[i];
#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(): memmove(%p, %p, %lu)\n", __func__,
			(void *)p, (void *)(p + 1),
			sizeof(*p) * (parser->callbacks_cnt - i));
#endif
	memmove(p, p + 1, sizeof(*p) * (parser->filters_cnt - i));
	parser->filters_cnt--;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jae 0xa114
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
cmpq -0x18(%rbp), %rax
jne 0xa104
jmp 0xa114
jmp 0xa106
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0xa0d8
movq -0x20(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x50(%rcx), %rax
je 0xa12b
movl $0x1, -0x4(%rbp)
jmp 0xa17a
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movq -0x28(%rbp), %rsi
addq $0x10, %rsi
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rdx
subq -0x20(%rbp), %rdx
shlq $0x4, %rdx
callq 0x46a0
movq -0x10(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/plugin.c
// Function: plugin_new
Plugin * plugin_new(String const * libdir, String const * package,
		String const * type, String const * name)
{
	Plugin * plugin;
	String * filename;
	char const ext[] = PLUGIN_EXTENSION;

	if((filename = string_new_append(libdir, "/", package, "/", type, "/",
					name, ext, NULL)) == NULL)
		return NULL;
	plugin = _plugin_open(filename);
	string_delete(filename);
	return plugin;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movl 0x5fce(%rip), %eax      # 0x101bc
movl %eax, -0x3c(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %r8
movq -0x28(%rbp), %r10
leaq -0x3c(%rbp), %rax
leaq 0x5e7e(%rip), %r9       # 0x1008a
xorl %ecx, %ecx
movq %r9, %rsi
movq %r9, %rcx
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movb $0x0, %al
callq 0x4220
movq %rax, -0x38(%rbp)
cmpq $0x0, %rax
jne 0xa241
movq $0x0, -0x8(%rbp)
jmp 0xa25f
movq -0x38(%rbp), %rdi
callq 0xa270
movq %rax, -0x30(%rbp)
movq -0x38(%rbp), %rdi
callq 0x4260
movq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/string.c
// Function: string_new
String * string_new(String const * string)
{
	String * ret = NULL;

	if(string == NULL)
	{
		error_set_code(-EINVAL, "%s", strerror(EINVAL));
		return NULL;
	}
	if(string_set(&ret, string) != 0)
		return NULL;
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0xa3a5
movl $0x16, %edi
callq 0x4840
movq %rax, %rdx
movl $0xffffffea, %edi       # imm = 0xFFFFFFEA
leaq 0x5cca(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
jmp 0xa3c9
movq -0x10(%rbp), %rsi
leaq -0x18(%rbp), %rdi
callq 0x41c0
cmpl $0x0, %eax
je 0xa3c1
movq $0x0, -0x8(%rbp)
jmp 0xa3c9
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/string.c
// Function: string_set
int string_set(String ** string, String const * string2)
{
	size_t len = string_get_length(string2);

	if(object_resize((Object **)string, len + 1) != 0)
		return 1;
	strcpy(*string, string2);
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x4350
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x1, %rsi
callq 0x4750
cmpl $0x0, %eax
je 0xa41c
movl $0x1, -0x4(%rbp)
jmp 0xa433
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rsi
callq 0x4130
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/string.c
// Function: string_new_appendv
String * string_new_appendv(String const * string, va_list ap)
{
	String * ret = NULL;

	if(string == NULL)
		return string_new("");
	ret = string_new(string);
	for(string = va_arg(ap, String *); string != NULL;
			string = va_arg(ap, String *))
		if(string_append(&ret, string) != 0)
		{
			string_delete(ret);
			ret = NULL;
			break;
		}
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0xa514
leaq 0x5bb3(%rip), %rdi      # 0x100b9
callq 0x41f0
movq %rax, -0x8(%rbp)
jmp 0xa5f3
movq -0x10(%rbp), %rdi
callq 0x41f0
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x30(%rbp)
movl (%rax), %eax
movl %eax, -0x24(%rbp)
cmpl $0x28, %eax
ja 0xa54c
movq -0x30(%rbp), %rcx
movl -0x24(%rbp), %edx
movslq %edx, %rax
addq 0x10(%rcx), %rax
addl $0x8, %edx
movl %edx, (%rcx)
movq %rax, -0x38(%rbp)
jmp 0xa563
movq -0x30(%rbp), %rcx
movq 0x8(%rcx), %rax
movq %rax, %rdx
addq $0x8, %rdx
movq %rdx, 0x8(%rcx)
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0xa5eb
movq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x43d0
cmpl $0x0, %eax
je 0xa59a
movq -0x20(%rbp), %rdi
callq 0x4260
movq $0x0, -0x20(%rbp)
jmp 0xa5eb
jmp 0xa59c
movq -0x18(%rbp), %rax
movq %rax, -0x48(%rbp)
movl (%rax), %eax
movl %eax, -0x3c(%rbp)
cmpl $0x28, %eax
ja 0xa5c7
movq -0x48(%rbp), %rcx
movl -0x3c(%rbp), %edx
movslq %edx, %rax
addq 0x10(%rcx), %rax
addl $0x8, %edx
movl %edx, (%rcx)
movq %rax, -0x50(%rbp)
jmp 0xa5de
movq -0x48(%rbp), %rcx
movq 0x8(%rcx), %rax
movq %rax, %rdx
addq $0x8, %rdx
movq %rdx, 0x8(%rcx)
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
jmp 0xa56e
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/string.c
// Function: string_append
int string_append(String ** string, String const * append)
{
	size_t slength = (*string != NULL) ? string_get_length(*string) : 0;
	size_t alength;

	if(append == NULL)
		return error_set_code(-EINVAL, "%s", strerror(EINVAL));
	if((alength = string_get_length(append)) == 0)
		return 0;
	if(object_resize((Object**)string, slength + alength + 1) != 0)
		return 1;
	strcpy(*string + slength, append);
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, (%rax)
je 0xa62c
movq -0x10(%rbp), %rax
movq (%rax), %rdi
callq 0x4350
movq %rax, -0x30(%rbp)
jmp 0xa634
xorl %eax, %eax
movq %rax, -0x30(%rbp)
jmp 0xa634
movq -0x30(%rbp), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0xa668
movl $0x16, %edi
callq 0x4840
movq %rax, %rdx
movl $0xffffffea, %edi       # imm = 0xFFFFFFEA
leaq 0x5a02(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movl %eax, -0x4(%rbp)
jmp 0xa6c2
movq -0x18(%rbp), %rdi
callq 0x4350
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0xa684
movl $0x0, -0x4(%rbp)
jmp 0xa6c2
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq -0x28(%rbp), %rsi
addq $0x1, %rsi
callq 0x4750
cmpl $0x0, %eax
je 0xa6a7
movl $0x1, -0x4(%rbp)
jmp 0xa6c2
movq -0x10(%rbp), %rax
movq (%rax), %rdi
addq -0x20(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x4130
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/string.c
// Function: string_new_formatv
String * string_new_formatv(String const * format, va_list ap)
{
	String * ret;
	va_list v;
	int len;
	size_t s;

	if(format == NULL)
	{
		error_set_code(-EINVAL, "%s", strerror(EINVAL));
		return NULL;
	}
	va_copy(v, ap);
	len = vsnprintf(NULL, 0, format, v);
	va_end(v);
	if(len < 0)
	{
		error_set_code(-errno, "%s", strerror(errno));
		return NULL;
	}
	s = (size_t)len + 1;
	if((ret = (String *)object_new(s)) == NULL)
		return NULL;
	if(vsnprintf(ret, s, format, ap) != len)
	{
		error_set_code(-errno, "%s", strerror(errno));
		object_delete(ret);
		ret = NULL;
	}
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0xa7d4
movl $0x16, %edi
callq 0x4840
movq %rax, %rdx
movl $0xffffffea, %edi       # imm = 0xFFFFFFEA
leaq 0x589e(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
jmp 0xa8d2
leaq -0x40(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movups (%rcx), %xmm0
movups %xmm0, (%rax)
movq -0x10(%rbp), %rdx
leaq -0x40(%rbp), %rcx
xorl %eax, %eax
movl %eax, %esi
movq %rsi, %rdi
callq 0x41b0
movl %eax, -0x44(%rbp)
leaq -0x40(%rbp), %rax
cmpl $0x0, -0x44(%rbp)
jge 0xa847
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x54(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x54(%rbp), %edi
movq %rax, %rdx
leaq 0x582b(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
jmp 0xa8d2
movslq -0x44(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
callq 0x4640
movq %rax, -0x20(%rbp)
cmpq $0x0, %rax
jne 0xa870
movq $0x0, -0x8(%rbp)
jmp 0xa8d2
movq -0x20(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
callq 0x41b0
cmpl -0x44(%rbp), %eax
je 0xa8ca
callq 0x40d0
movq %rax, %rcx
xorl %eax, %eax
subl (%rcx), %eax
movl %eax, -0x58(%rbp)
callq 0x40d0
movl (%rax), %edi
callq 0x4840
movl -0x58(%rbp), %edi
movq %rax, %rdx
leaq 0x57ac(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq -0x20(%rbp), %rdi
callq 0x44a0
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/string.c
// Function: string_new_length
String * string_new_length(String const * string, size_t length)
{
	String * ret;

#ifdef DEBUG
	fprintf(stderr, "DEBUG: %s(\"%s\", %zu)\n", __func__, string, length);
#endif
	if(length + 1 == 0)
	{
		error_set_code(-ERANGE, "%s", strerror(ERANGE));
		return NULL;
	}
	if((ret = (String *)object_new(length + 1)) == NULL)
		return NULL;
	snprintf(ret, length + 1, "%s", (string != NULL) ? string : "");
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
cmpq $0x0, %rax
jne 0xa928
movl $0x22, %edi
callq 0x4840
movq %rax, %rdx
movl $0xffffffde, %edi       # imm = 0xFFFFFFDE
leaq 0x5747(%rip), %rsi      # 0x1005e
movb $0x0, %al
callq 0x4630
movq $0x0, -0x8(%rbp)
jmp 0xa99d
movq -0x18(%rbp), %rdi
addq $0x1, %rdi
callq 0x4640
movq %rax, -0x20(%rbp)
cmpq $0x0, %rax
jne 0xa949
movq $0x0, -0x8(%rbp)
jmp 0xa99d
movq -0x20(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0xa96e
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0xa97b
leaq 0x5744(%rip), %rax      # 0x100b9
movq %rax, -0x38(%rbp)
jmp 0xa97b
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rcx
leaq 0x56d0(%rip), %rdx      # 0x1005e
movb $0x0, %al
callq 0x42a0
movq -0x20(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/DeforaOS[P]libSystem/src/string.c
// Function: string_new_replace
String * string_new_replace(String const * string, String const * what,
		String const * by)
{
	String * ret;

	if((ret = string_new(string)) == NULL)
		return NULL;
	if(string_replace(&ret, what, by) != 0)
	{
		string_delete(ret);
		return NULL;
	}
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
callq 0x41f0
movq %rax, -0x28(%rbp)
cmpq $0x0, %rax
jne 0xa9e1
movq $0x0, -0x8(%rbp)
jmp 0xaa12
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x28(%rbp), %rdi
callq 0x4040
cmpl $0x0, %eax
je 0xaa0a
movq -0x28(%rbp), %rdi
callq 0x4260
movq $0x0, -0x8(%rbp)
jmp 0xaa12
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)