| Index: tests/pnacl_dynamic_loading/libc_entry.c
|
| diff --git a/tests/pnacl_dynamic_loading/libc_entry.c b/tests/pnacl_dynamic_loading/libc_entry.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..57339161f652b4572a13f9c932dec45df79708ba
|
| --- /dev/null
|
| +++ b/tests/pnacl_dynamic_loading/libc_entry.c
|
| @@ -0,0 +1,57 @@
|
| +/*
|
| + * Copyright (c) 2016 The Native Client Authors. All rights reserved.
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#include <stdlib.h>
|
| +#include <unistd.h>
|
| +
|
| +#include "native_client/src/include/elf32.h"
|
| +#include "native_client/src/untrusted/nacl/nacl_irt.h"
|
| +#include "native_client/src/untrusted/nacl/start.h"
|
| +#include "native_client/src/untrusted/nacl/tls.h"
|
| +
|
| +
|
| +/*
|
| + * Provide dummy definitions of _init() and _fini() because they are
|
| + * referenced by libc.a's __libc_init_array(), which we do not use in this
|
| + * context.
|
| + */
|
| +
|
| +void _init(void) {
|
| + abort();
|
| +}
|
| +
|
| +void _fini(void) {
|
| + abort();
|
| +}
|
| +
|
| +/*
|
| + * Provide dummy definitions of the TLS layout functions because they are
|
| + * referenced by libnacl.a's tls.c, which we do not use in this context.
|
| + */
|
| +
|
| +ptrdiff_t __nacl_tp_tls_offset(size_t tls_size) {
|
| + abort();
|
| +}
|
| +
|
| +ptrdiff_t __nacl_tp_tdb_offset(size_t tdb_size) {
|
| + abort();
|
| +}
|
| +
|
| +void __libc_start(int argc, char **argv, char **envp, Elf32_auxv_t *auxv) {
|
| + environ = envp;
|
| +
|
| + __libnacl_irt_init(auxv);
|
| +
|
| + /*
|
| + * We don't support TLS or pthreads yet, so we skip
|
| + * __pthread_initialize() for now.
|
| + */
|
| + __newlib_thread_init();
|
| +
|
| + exit(main(argc, argv, envp));
|
| +
|
| + __builtin_trap();
|
| +}
|
|
|