From 06aaee48192d4dcd92c7d38de77b2dc50c8a0346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gwenol=C3=A9=20Beauchesne?= Date: Tue, 14 Dec 2004 17:07:23 +0000 Subject: ppc64 support --- mdk-stage1/dietlibc/ppc64/Makefile.add | 3 + mdk-stage1/dietlibc/ppc64/__longjmp.S | 54 ++++++ mdk-stage1/dietlibc/ppc64/__testandset.S | 12 ++ mdk-stage1/dietlibc/ppc64/clone.S | 48 +++++ mdk-stage1/dietlibc/ppc64/mmap.S | 3 + mdk-stage1/dietlibc/ppc64/setjmp.S | 59 +++++++ mdk-stage1/dietlibc/ppc64/start.S | 74 ++++++++ mdk-stage1/dietlibc/ppc64/syscalls.h | 289 +++++++++++++++++++++++++++++++ mdk-stage1/dietlibc/ppc64/umount.S | 8 + mdk-stage1/dietlibc/ppc64/unified.S | 68 ++++++++ 10 files changed, 618 insertions(+) create mode 100644 mdk-stage1/dietlibc/ppc64/Makefile.add create mode 100644 mdk-stage1/dietlibc/ppc64/__longjmp.S create mode 100644 mdk-stage1/dietlibc/ppc64/__testandset.S create mode 100644 mdk-stage1/dietlibc/ppc64/clone.S create mode 100644 mdk-stage1/dietlibc/ppc64/mmap.S create mode 100644 mdk-stage1/dietlibc/ppc64/setjmp.S create mode 100644 mdk-stage1/dietlibc/ppc64/start.S create mode 100644 mdk-stage1/dietlibc/ppc64/syscalls.h create mode 100644 mdk-stage1/dietlibc/ppc64/umount.S create mode 100644 mdk-stage1/dietlibc/ppc64/unified.S (limited to 'mdk-stage1/dietlibc') diff --git a/mdk-stage1/dietlibc/ppc64/Makefile.add b/mdk-stage1/dietlibc/ppc64/Makefile.add new file mode 100644 index 000000000..e5031d6b5 --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/Makefile.add @@ -0,0 +1,3 @@ + +CFLAGS+=-Os -mpowerpc64 +VPATH:=ppc64:syscalls.s:$(VPATH) diff --git a/mdk-stage1/dietlibc/ppc64/__longjmp.S b/mdk-stage1/dietlibc/ppc64/__longjmp.S new file mode 100644 index 000000000..f22aa274c --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/__longjmp.S @@ -0,0 +1,54 @@ +#include + + .quad .__longjmp,.TOC.@tocbase,0 + .previous + .size __longjmp,24 + .type .__longjmp,@function + .globl .__longjmp +.align 2 +.__longjmp: + ld 1,(JB_GPR1*8)(3) + ld 2,(JB_GPR2*8)(3) + ld 0,(JB_LR*8)(3) + ld 14,((JB_GPRS+0)*8)(3) + lfd 14,((JB_FPRS+0*2)*8)(3) + ld 15,((JB_GPRS+1)*8)(3) + lfd 15,((JB_FPRS+1*2)*8)(3) + ld 16,((JB_GPRS+2)*8)(3) + lfd 16,((JB_FPRS+2*2)*8)(3) + ld 17,((JB_GPRS+3)*8)(3) + lfd 17,((JB_FPRS+3*2)*8)(3) + ld 18,((JB_GPRS+4)*8)(3) + lfd 18,((JB_FPRS+4*2)*8)(3) + ld 19,((JB_GPRS+5)*8)(3) + lfd 19,((JB_FPRS+5*2)*8)(3) + ld 20,((JB_GPRS+6)*8)(3) + lfd 20,((JB_FPRS+6*2)*8)(3) + mtlr 0 + ld 21,((JB_GPRS+7)*8)(3) + lfd 21,((JB_FPRS+7*2)*8)(3) + ld 22,((JB_GPRS+8)*8)(3) + lfd 22,((JB_FPRS+8*2)*8)(3) + ld 0,(JB_CR*8)(3) + ld 23,((JB_GPRS+9)*8)(3) + lfd 23,((JB_FPRS+9*2)*8)(3) + ld 24,((JB_GPRS+10)*8)(3) + lfd 24,((JB_FPRS+10*2)*8)(3) + ld 25,((JB_GPRS+11)*8)(3) + lfd 25,((JB_FPRS+11*2)*8)(3) + mtcrf 0xFF,0 + ld 26,((JB_GPRS+12)*8)(3) + lfd 26,((JB_FPRS+12*2)*8)(3) + ld 27,((JB_GPRS+13)*8)(3) + lfd 27,((JB_FPRS+13*2)*8)(3) + ld 28,((JB_GPRS+14)*8)(3) + lfd 28,((JB_FPRS+14*2)*8)(3) + ld 29,((JB_GPRS+15)*8)(3) + lfd 29,((JB_FPRS+15*2)*8)(3) + ld 30,((JB_GPRS+16)*8)(3) + lfd 30,((JB_FPRS+16*2)*8)(3) + ld 31,((JB_GPRS+17)*8)(3) + lfd 31,((JB_FPRS+17*2)*8)(3) + mr 3,4 + blr +.size .__longjmp,.-.__longjmp diff --git a/mdk-stage1/dietlibc/ppc64/__testandset.S b/mdk-stage1/dietlibc/ppc64/__testandset.S new file mode 100644 index 000000000..146982337 --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/__testandset.S @@ -0,0 +1,12 @@ +.global __testandset +.type __testandset,@function +.align 2 +__testandset: +1: lwarx 5,0,3 + li 0,1 + stwcx. 0,0,3 + bne- 1b + mr 3,5 + blr +.size __testandset,.-__testandset + diff --git a/mdk-stage1/dietlibc/ppc64/clone.S b/mdk-stage1/dietlibc/ppc64/clone.S new file mode 100644 index 000000000..98f6bd4e8 --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/clone.S @@ -0,0 +1,48 @@ +#include +#include "syscalls.h" +#include + +.text +.weak clone +clone: +.global __clone +__clone: + cmpwi 4,0 /* check have non null child_stack pointer */ + cmpwi cr1, 3,0 /* check have non null thread_funcion */ + cror eq,4*cr1+eq,eq /* now if eq is set one is or both are zero */ + beq .Lclone_error + + stwu 1,-32(1) /* alloc some space on the stack */ + stmw 29, 16(1) /* save r29,r30,r31 on stack */ + + rlwinm 4,4,0,0,27 /* mask out lower 4 bits */ + + /* move parameter to positions clone wants them */ + mr 29,3 /* r29 = r3 fn */ + mr 30,4 /* r30 = r4 stack */ + mr 31,6 /* r31 = r6 arg */ + mr 3, 5 /* r3 = r5 flags */ + + li 0, __NR_clone /* load syscall nr. */ + sc + + cmpwi cr1,3,0 /* compare return of syscall with 0 */ + crandc 4*cr1+eq,4*cr1+eq,so + bne .Lclone_parent /* return was non zero -> .Lclone_parent */ + + /* we are the cloned process */ + mr 1, 30 /* set stack pointer */ + mtctr 29 /* set count register to fn ? */ + mr 3, 31 /* set argument */ + bctrl /* branch trough count register and link */ + b _exit /* exit thread */ + +.Lclone_parent: + lmw 29,16(1) /* restore saved registers */ + addi 1, 1,32 /* free stack */ + bnslr+ /* had cloned a thread so return to parent */ + b error_unified_syscall + +.Lclone_error: + li 3, EINVAL + b error_unified_syscall diff --git a/mdk-stage1/dietlibc/ppc64/mmap.S b/mdk-stage1/dietlibc/ppc64/mmap.S new file mode 100644 index 000000000..2e57fbb74 --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/mmap.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(mmap,mmap) diff --git a/mdk-stage1/dietlibc/ppc64/setjmp.S b/mdk-stage1/dietlibc/ppc64/setjmp.S new file mode 100644 index 000000000..34aa4c2cd --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/setjmp.S @@ -0,0 +1,59 @@ +#include + +#ifdef PIC +#define JUMPTARGET(name) name##@plt +#else +#define JUMPTARGET(name) .name +#endif + + .quad .__sigsetjmp,.TOC.@tocbase,0 + .previous + .size __sigsetjmp,24 + .type .__sigsetjmp,@function + .globl .__sigsetjmp +.align 2 +.__sigsetjmp: + std 1,(JB_GPR1*8)(3) + mflr 0 + std 2,(JB_GPR2*8)(3) + std 14,((JB_GPRS+0)*8)(3) + stfd 14,((JB_FPRS+0*2)*8)(3) + std 0,(JB_LR*8)(3) + std 15,((JB_GPRS+1)*8)(3) + stfd 15,((JB_FPRS+1*2)*8)(3) + mfcr 0 + std 16,((JB_GPRS+2)*8)(3) + stfd 16,((JB_FPRS+2*2)*8)(3) + std 0,(JB_CR*8)(3) + std 17,((JB_GPRS+3)*8)(3) + stfd 17,((JB_FPRS+3*2)*8)(3) + std 18,((JB_GPRS+4)*8)(3) + stfd 18,((JB_FPRS+4*2)*8)(3) + std 19,((JB_GPRS+5)*8)(3) + stfd 19,((JB_FPRS+5*2)*8)(3) + std 20,((JB_GPRS+6)*8)(3) + stfd 20,((JB_FPRS+6*2)*8)(3) + std 21,((JB_GPRS+7)*8)(3) + stfd 21,((JB_FPRS+7*2)*8)(3) + std 22,((JB_GPRS+8)*8)(3) + stfd 22,((JB_FPRS+8*2)*8)(3) + std 23,((JB_GPRS+9)*8)(3) + stfd 23,((JB_FPRS+9*2)*8)(3) + std 24,((JB_GPRS+10)*8)(3) + stfd 24,((JB_FPRS+10*2)*8)(3) + std 25,((JB_GPRS+11)*8)(3) + stfd 25,((JB_FPRS+11*2)*8)(3) + std 26,((JB_GPRS+12)*8)(3) + stfd 26,((JB_FPRS+12*2)*8)(3) + std 27,((JB_GPRS+13)*8)(3) + stfd 27,((JB_FPRS+13*2)*8)(3) + std 28,((JB_GPRS+14)*8)(3) + stfd 28,((JB_FPRS+14*2)*8)(3) + std 29,((JB_GPRS+15)*8)(3) + stfd 29,((JB_FPRS+15*2)*8)(3) + std 30,((JB_GPRS+16)*8)(3) + stfd 30,((JB_FPRS+16*2)*8)(3) + std 31,((JB_GPRS+17)*8)(3) + stfd 31,((JB_FPRS+17*2)*8)(3) + b JUMPTARGET (__sigjmp_save) +.size .__sigsetjmp,.-.__sigsetjmp diff --git a/mdk-stage1/dietlibc/ppc64/start.S b/mdk-stage1/dietlibc/ppc64/start.S new file mode 100644 index 000000000..6fc8d327b --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/start.S @@ -0,0 +1,74 @@ + .section ".text" + .align 2 + .globl ._start + .type ._start,@function + .globl _start + .section ".opd","aw" +_start: + .quad ._start + .quad .TOC.@tocbase, 0 + .previous +._start: + +/* + .section ".text" + .align 2 + .globl ._start + .type ._start,@function + .globl _start + .section ".opd","aw" +_start: + .quad ._start + .quad .TOC.@tocbase, 0 + .previous +._start: +*/ + /* Save the stack pointer, in case we're statically linked under Linux. */ + mr 9,1 + /* Set up an initial stack frame, and clear the LR. */ + clrrdi 1,1,4 + li 0,0 + stdu 1,-128(1) + mtlr 0 + std 0,0(1) + + /* r9 contains the initial stack pointer + argc = (r9) + argv = (r9+4) + envp = argv+(argc+1)*4 */ + + ldu 3,0(9) /* argc */ + addi 4,9,8 /* argv */ + add 5,0,3 /* argc... */ + addi 5,5,1 /* argc+1...*/ + slwi 5,5,3 /* (argc+1)*4 */ + add 5,5,4 /* argv+(argc+1)*4 */ + + lis 14,environ@ha + std 5,environ@l(14) + +#ifdef WANT_DYNAMIC +#warning dynamic + mr 6,7 + bl ._dyn_start +#else +#warning static + bl .main +#endif + b .exit + +.LT_start: + .long 0 + .quad 0x000c000000000000 | 0x0000200000000000 | 0x0000004000000000 + .long .LT_start-._start + .short .LT_start_name_end-.LT_start_name_start +.LT_start_name_start: + .ascii "_start" +.LT_start_name_end: + .align 2 + .size _start,.-_start + +/* Define a symbol for the first piece of initialized data. */ + .section ".data" +__data_start: + diff --git a/mdk-stage1/dietlibc/ppc64/syscalls.h b/mdk-stage1/dietlibc/ppc64/syscalls.h new file mode 100644 index 000000000..0547a3516 --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/syscalls.h @@ -0,0 +1,289 @@ + +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_lchown 16 +#define __NR_break 17 +#define __NR_oldstat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_oldfstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_umount2 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_oldolduname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 +#define __NR_getrusage 77 +#define __NR_gettimeofday 78 +#define __NR_settimeofday 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_oldlstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define __NR_swapon 87 +#define __NR_reboot 88 +#define __NR_readdir 89 +#define __NR_mmap 90 +#define __NR_munmap 91 +#define __NR_truncate 92 +#define __NR_ftruncate 93 +#define __NR_fchmod 94 +#define __NR_fchown 95 +#define __NR_getpriority 96 +#define __NR_setpriority 97 +#define __NR_profil 98 +#define __NR_statfs 99 +#define __NR_fstatfs 100 +#define __NR_ioperm 101 +#define __NR_socketcall 102 +#define __NR_syslog 103 +#define __NR_setitimer 104 +#define __NR_getitimer 105 +#define __NR_stat 106 +#define __NR_lstat 107 +#define __NR_fstat 108 +#define __NR_olduname 109 +#define __NR_iopl 110 +#define __NR_vhangup 111 +#define __NR_idle 112 +#define __NR_vm86 113 +#define __NR_wait4 114 +#define __NR_swapoff 115 +#define __NR_sysinfo 116 +#define __NR_ipc 117 +#define __NR_fsync 118 +#define __NR_sigreturn 119 +#define __NR_clone 120 +#define __NR_setdomainname 121 +#define __NR_uname 122 +#define __NR_modify_ldt 123 +#define __NR_adjtimex 124 +#define __NR_mprotect 125 +#define __NR_sigprocmask 126 +#define __NR_create_module 127 +#define __NR_init_module 128 +#define __NR_delete_module 129 +#define __NR_get_kernel_syms 130 +#define __NR_quotactl 131 +#define __NR_getpgid 132 +#define __NR_fchdir 133 +#define __NR_bdflush 134 +#define __NR_sysfs 135 +#define __NR_personality 136 +#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ +#define __NR_setfsuid 138 +#define __NR_setfsgid 139 +#define __NR__llseek 140 +#define __NR_getdents 141 +#define __NR__newselect 142 +#define __NR_flock 143 +#define __NR_msync 144 +#define __NR_readv 145 +#define __NR_writev 146 +#define __NR_getsid 147 +#define __NR_fdatasync 148 +#define __NR__sysctl 149 +#define __NR_mlock 150 +#define __NR_munlock 151 +#define __NR_mlockall 152 +#define __NR_munlockall 153 +#define __NR_sched_setparam 154 +#define __NR_sched_getparam 155 +#define __NR_sched_setscheduler 156 +#define __NR_sched_getscheduler 157 +#define __NR_sched_yield 158 +#define __NR_sched_get_priority_max 159 +#define __NR_sched_get_priority_min 160 +#define __NR_sched_rr_get_interval 161 +#define __NR_nanosleep 162 +#define __NR_mremap 163 +#define __NR_setresuid 164 +#define __NR_getresuid 165 +#define __NR_query_module 166 +#define __NR_poll 167 +#define __NR_nfsservctl 168 +#define __NR_setresgid 169 +#define __NR_getresgid 170 +#define __NR_prctl 171 +#define __NR_rt_sigreturn 172 +#define __NR_rt_sigaction 173 +#define __NR_rt_sigprocmask 174 +#define __NR_rt_sigpending 175 +#define __NR_rt_sigtimedwait 176 +#define __NR_rt_sigqueueinfo 177 +#define __NR_rt_sigsuspend 178 +#define __NR_pread 179 +#define __NR_pwrite 180 +#define __NR_chown 181 +#define __NR_getcwd 182 +#define __NR_capget 183 +#define __NR_capset 184 +#define __NR_sigaltstack 185 +#define __NR_sendfile 186 +#define __NR_getpmsg 187 /* some people actually want streams */ +#define __NR_putpmsg 188 /* some people actually want streams */ +#define __NR_vfork 189 +#define __NR_ugetrlimit 190 /* SuS compliant getrlimit */ +#define __NR_mmap2 192 +//#define __NR_truncate64 193 +//#define __NR_ftruncate64 194 +//#define __NR_stat64 195 +//#define __NR_lstat64 196 +//#define __NR_fstat64 197 +#define __NR_pciconfig_read 198 +#define __NR_pciconfig_write 199 +#define __NR_pciconfig_iobase 200 +#define __NR_multiplexer 201 +//#define __NR_getdents64 202 +#define __NR_pivot_root 203 +//#define __NR_fcntl64 204 +#define __NR_madvise 205 +#define __NR_mincore 206 +#define __NR_gettid 207 +#define __NR_tkill 208 +#define __NR_setxattr 209 +#define __NR_lsetxattr 210 +#define __NR_fsetxattr 211 +#define __NR_getxattr 212 +#define __NR_lgetxattr 213 +#define __NR_fgetxattr 214 +#define __NR_listxattr 215 +#define __NR_llistxattr 216 +#define __NR_flistxattr 217 +#define __NR_removexattr 218 +#define __NR_lremovexattr 219 +#define __NR_fremovexattr 220 +#define __NR_futex 221 +#define __NR_sched_setaffinity 222 +#define __NR_sched_getaffinity 223 +/* 224 currently unused */ +#define __NR_tuxcall 225 +//#define __NR_sendfile64 226 +#define __NR_io_setup 227 +#define __NR_io_destroy 228 +#define __NR_io_getevents 229 +#define __NR_io_submit 230 +#define __NR_io_cancel 231 +#define __NR_set_tid_address 232 +#define __NR_fadvise64 233 +#define __NR_exit_group 234 +#define __NR_lookup_dcookie 235 +#define __NR_sys_epoll_create 236 +#define __NR_sys_epoll_ctl 237 +#define __NR_sys_epoll_wait 238 +#define __NR_remap_file_pages 239 +#define __NR_timer_create 240 +#define __NR_timer_settime 241 +#define __NR_timer_gettime 242 +#define __NR_timer_getoverrun 243 +#define __NR_timer_delete 244 +#define __NR_clock_settime 245 +#define __NR_clock_gettime 246 +#define __NR_clock_getres 247 +#define __NR_clock_nanosleep 248 +#define __NR_swapcontext 249 +#define __NR_tgkill 250 +#define __NR_utimes 251 +#define __NR_statfs64 252 +#define __NR_fstatfs64 253 + + +#define diet_proto_weak(wsym) \ +wsym: \ + .quad .wsym,.TOC.@tocbase,0;\ + .previous;\ + .size wsym,24;\ + .type .wsym,@function;\ + .globl .wsym;\ + .weak wsym;\ + +#define diet_proto(sym) \ +sym:\ + .quad .sym,.TOC.@tocbase,0;\ + .previous;\ + .size sym,24;\ + .type .sym,@function;\ + .globl .sym;\ + +#define syscall_weak(name,wsym,sym) \ +.text; \ +diet_proto_weak(wsym); \ +diet_proto(sym); \ +.wsym:\ + .weak .wsym;\ +.sym: \ + li 0,__NR_##name; \ + b __unified_syscall + +#define syscall(name,sym) \ +.text; \ +diet_proto(sym); \ +.sym: \ + li 0,__NR_##name; \ + b __unified_syscall + diff --git a/mdk-stage1/dietlibc/ppc64/umount.S b/mdk-stage1/dietlibc/ppc64/umount.S new file mode 100644 index 000000000..2f548a402 --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/umount.S @@ -0,0 +1,8 @@ +#include "syscalls.h" + + .text +diet_proto(umount) +.umount: + li 0, __NR_umount2 + li 4, 0 + b __unified_syscall diff --git a/mdk-stage1/dietlibc/ppc64/unified.S b/mdk-stage1/dietlibc/ppc64/unified.S new file mode 100644 index 000000000..4c7353d3f --- /dev/null +++ b/mdk-stage1/dietlibc/ppc64/unified.S @@ -0,0 +1,68 @@ +#include +#include "syscalls.h" + + .text +.exit: + .weak .exit +._exit: + li 0,__NR_exit + .global __unified_syscall +__unified_syscall: + sc + bnslr+ + + .global error_unified_syscall +error_unified_syscall: + +#ifdef WANT_THREAD_SAFE + stdu 1,-128(1) + mflr 0 + std 0,20(1) + std 3,12(1) + bl .__errno_location + ld 0,12(1) + stw 0,0(3) + ld 0,20(1) + mtlr 0 + addi 1,1,128 +#else + lis 9,errno@ha + stw 3,errno@l(9) +#endif + li 3,-1 + +/* here we go and "reuse" the return for weak-void functions */ +//#include "dietuglyweaks.h" +.__thread_doexit: + .weak .__thread_doexit +.__fflush_stdin: + .weak .__fflush_stdin +.__fflush_stdout: + .weak .__fflush_stdout +.__fflush_stderr: + .weak .__fflush_stderr +.flockfile: + .weak .flockfile +.funlockfile: + .weak .funlockfile +.__nop: + .weak .__nop +.__you_tried_to_link_a_dietlibc_object_against_glibc: + .weak .__you_tried_to_link_a_dietlibc_object_against_glibc + + blr + .long 0 + .byte 0,0,0,1,128,0,0,0 + .size ._exit,.-._exit + .size .exit,.-.exit + +diet_proto_weak(__thread_doexit) +diet_proto_weak(__fflush_stdin) +diet_proto_weak(__fflush_stdout) +diet_proto_weak(__fflush_stderr) +diet_proto_weak(flockfile) +diet_proto_weak(funlockfile) +diet_proto_weak(__nop) +diet_proto_weak(__you_tried_to_link_a_dietlibc_object_against_glibc) +diet_proto_weak(exit) +diet_proto(_exit) -- cgit v1.2.1