Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: tests/pnacl_ld_experiments/hello1.c

Issue 10268028: Intial experiment for building dynamic images without glibc under pnacl (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 #include <unistd.h>
jvoung - send to chromium... 2012/05/01 23:30:49 Copyright notice.
robertm 2012/05/02 17:33:12 Done.
2 #include <stdlib.h>
3
4 #define NACL_INSTR_BLOCK_SHIFT 5
jvoung - send to chromium... 2012/05/01 23:30:49 Note about this experiment being tailored to x86?
Robert Muth (chromium) 2012/05/02 16:18:32 IIRC this works for all archs
5 #define NACL_PAGESHIFT 12
6 #define NACL_SYSCALL_START_ADDR (16 << NACL_PAGESHIFT)
7 #define NACL_SYSCALL_ADDR(syscall_number) \
8 (NACL_SYSCALL_START_ADDR + (syscall_number << NACL_INSTR_BLOCK_SHIFT))
9
10 #define NACL_SYSCALL(s) ((TYPE_nacl_ ## s) NACL_SYSCALL_ADDR(NACL_sys_ ## s))
11
12 typedef int (*TYPE_nacl_write) (int desc, void const *buf, int count);
13 typedef void (*TYPE_nacl_null) (void);
14 typedef void (*TYPE_nacl_exit) (int status);
15
16 #include <bits/nacl_syscalls.h>
jvoung - send to chromium... 2012/05/01 23:30:49 Does this have to be included down here, or can it
Robert Muth (chromium) 2012/05/02 16:18:32 Done.
17
18 /* ====================================================================== */
jvoung - send to chromium... 2012/05/01 23:30:49 Comment about the purpose of this particular sub-e
Robert Muth (chromium) 2012/05/02 16:18:32 Done.
19 extern void _dl_get_tls_static_info(int *static_tls_size,
20 int *static_tls_align);
21 extern int __tls_get_addr();
22 /* ====================================================================== */
23 int mystrlen(const char* s) {
24 int count = 0;
25 while (*s++) ++count;
26 return count;
27 }
28
29
30 void myhextochar(int n, char buffer[9]) {
31 int i;
32 buffer[8] = 0;
33
34 for (i = 0; i < 8; ++i) {
35 int nibble = 0xf & (n >> (4 * (7 - i)));
36 if (nibble <= 9) {
37 buffer[i] = nibble + '0';
38 } else {
39 buffer[i] = nibble - 10 + 'A';
40 }
41 }
42 }
43
44 #define myprint(s) NACL_SYSCALL(write)(1, s, mystrlen(s))
45
46 __thread int tdata1 = 1;
47 __thread int tdata2 = 3;
48
49
50 ssize_t write(int l, const void* buf, size_t n) {
jvoung - send to chromium... 2012/05/01 23:30:49 Is that parameter a "l" or a "1"? Could you name i
jvoung - send to chromium... 2012/05/02 17:20:42 Well, I do think it will be clearer, since you do
51 return NACL_SYSCALL(write)(l, buf, n);
52 }
53
54 void exit(int ret) {
55 NACL_SYSCALL(exit)(ret);
56 }
57
58 void __deregister_frame_info(const void *begin) {
59 myprint("__deregister_frame_info\n");
60 }
61
62 void __register_frame_info(void *begin, void *ob) {
63 myprint("__register_frame_info\n");
64 }
65
66
67 int main(int argc, char** argv, char** envp) {
68 myprint("hello world\n");
69 char buffer[9];
70
71 myhextochar(tdata1, buffer);
72 myprint(buffer);
jvoung - send to chromium... 2012/05/01 23:30:49 perhaps print "tdata1 (expecting 1): " first, same
robertm 2012/05/02 17:33:12 Done.
73 myprint("\n");
74
75 myhextochar(tdata2, buffer);
76 myprint(buffer);
77 myprint("\n");
78
79 int static_tls_size;
80 int static_tls_align;
81
82 #if 0
83 /* will be enabled soon */
84 int x = (int) & __tls_get_addr;
85 myhextochar(x, buffer);
86 myprint(buffer);
87 myprint("\n");
88 _dl_get_tls_static_info (&static_tls_size, &static_tls_align);
89 #endif
90
91 return 0;
92 }
93
94 char message_init[] = "init\n";
95
96 int __libc_csu_init (int argc, char **argv, char **envp) {
97 write(1, message_init, sizeof(message_init));
98 return 0;
99 }
100
101 char message_fini[] = "fini\n";
102 void __libc_csu_fini (void) {
103 write(1, message_fini, sizeof(message_fini));
104 }
105
106 void __libc_start_main (int (*main) (int argc, char **argv, char **envp),
107 int argc, char **argv,
108 int (*init) (int argc, char **argv, char **envp),
109 void (*fini) (void),
110 void (*rtld_fini) (void),
111 void *stack_end) {
112
113 exit(main(0, 0, 0));
114 }
OLDNEW
« tests/pnacl_ld_experiments/fortytwo.c ('K') | « tests/pnacl_ld_experiments/fortytwo.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698