~ubuntu-branches/ubuntu/utopic/eglibc/utopic

« back to all changes in this revision

Viewing changes to ports/sysdeps/mips/start.S

  • Committer: Package Import Robot
  • Author(s): Adam Conrad
  • Date: 2012-10-26 05:14:58 UTC
  • mfrom: (1.5.1) (4.4.22 experimental)
  • Revision ID: package-import@ubuntu.com-20121026051458-oryotr4i03ob5pab
Tags: 2.16-0ubuntu1
* Merge with unreleased 2.16 in Debian experimental, remaining changes:
  - Drop the Breaks line from libc6, which refers to a Debian transition
  - Remove the libc6 recommends on libc6-i686, which we don't build
  - Enable libc6{,-dev}-armel on armhf and libc6{-dev}-armhf on armel
  - Ship update-locale and validlocale in /usr/sbin in libc-bin
  - Don't build locales or locales-all in Ubuntu, we rely on langpacks
  - Heavily mangle the way we do service restarting on major upgrades
  - Use different MIN_KERNEL_SUPPORTED versions than Debian, due to
    buildd needs.  This should be universally bumped to 3.2.0 once all
    our buildds (including the PPA guests) are running precise kernels
  - Build i386 variants as -march=i686, build amd64 with -O3, and build
    ppc64 variants (both 64-bit and 32-bit) with -O3 -fno-tree-vectorize
  - Re-enable unsubmitted-ldconfig-cache-abi.diff and rebuild the cache
    on upgrades from previous versions that used a different constant
  - debian/patches/any/local-CVE-2012-3406.diff: switch to malloc when
    array grows too large to handle via alloca extension (CVE-2012-3406)
  - Build generic i386/i686 flavour with -mno-tls-direct-seg-refs
* Changes added/dropped with this merge while reducing our delta:
  - Stop building glibc docs from the eglibc source, and instead make
    the glibc-docs stub have a hard dependency on glibc-doc-reference
  - Remove outdated conflicts against ancient versions of ia32-libs
  - Drop the tzdata dependency from libc6, it's in required and minimal
  - Use gcc-4.7/g++-4.7 by default on all our supported architectures
  - Save our historical changelog as changelog.ubuntu in the source
  - Drop nscd's libaudit build-dep for now, as libaudit is in universe
  - Drop the unnecessary Breaks from libc6 to locales and locales-all
  - Ship xen's ld.so.conf.d snippet as /etc/ld.so.conf.d/libc6-xen.conf
* Disable hard failures on the test suite for the first upload to raring

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Startup code compliant to the ELF Mips ABI.
 
2
   Copyright (C) 1995, 1997, 2000, 2001, 2002, 2003, 2004
 
3
        Free Software Foundation, Inc.
 
4
   This file is part of the GNU C Library.
 
5
 
 
6
   The GNU C Library is free software; you can redistribute it and/or
 
7
   modify it under the terms of the GNU Lesser General Public
 
8
   License as published by the Free Software Foundation; either
 
9
   version 2.1 of the License, or (at your option) any later version.
 
10
 
 
11
   In addition to the permissions in the GNU Lesser General Public
 
12
   License, the Free Software Foundation gives you unlimited
 
13
   permission to link the compiled version of this file with other
 
14
   programs, and to distribute those programs without any restriction
 
15
   coming from the use of this file. (The GNU Lesser General Public
 
16
   License restrictions do apply in other respects; for example, they
 
17
   cover modification of the file, and distribution when not linked
 
18
   into another program.)
 
19
 
 
20
   Note that people who make modified versions of this file are not
 
21
   obligated to grant this special exception for their modified
 
22
   versions; it is their choice whether to do so. The GNU Lesser
 
23
   General Public License gives permission to release a modified
 
24
   version without this exception; this exception also makes it
 
25
   possible to release a modified version which carries forward this
 
26
   exception.
 
27
 
 
28
   The GNU C Library is distributed in the hope that it will be useful,
 
29
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
30
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
31
   Lesser General Public License for more details.
 
32
 
 
33
   You should have received a copy of the GNU Lesser General Public
 
34
   License along with the GNU C Library.  If not, see
 
35
   <http://www.gnu.org/licenses/>.  */
 
36
 
 
37
#define __ASSEMBLY__ 1
 
38
#include <entry.h>
 
39
#include <sgidefs.h>
 
40
#include <sys/asm.h>
 
41
 
 
42
#ifndef ENTRY_POINT
 
43
#error ENTRY_POINT needs to be defined for start.S on MIPS/ELF.
 
44
#endif
 
45
 
 
46
/* This is the canonical entry point, usually the first thing in the text
 
47
   segment.  The SVR4/Mips ABI (pages 3-31, 3-32) says that when the entry
 
48
   point runs, most registers' values are unspecified, except for:
 
49
 
 
50
   v0 ($2)      Contains a function pointer to be registered with `atexit'.
 
51
                This is how the dynamic linker arranges to have DT_FINI
 
52
                functions called for shared libraries that have been loaded
 
53
                before this code runs.
 
54
 
 
55
   sp ($29)     The stack contains the arguments and environment:
 
56
                0(%esp)                 argc
 
57
                4(%esp)                 argv[0]
 
58
                ...
 
59
                (4*argc)(%esp)          NULL
 
60
                (4*(argc+1))(%esp)      envp[0]
 
61
                ...
 
62
                                        NULL
 
63
   ra ($31)     The return address register is set to zero so that programs
 
64
                that search backword through stack frames recognize the last
 
65
                stack frame.
 
66
*/
 
67
 
 
68
 
 
69
/* We need to call:
 
70
   __libc_start_main (int (*main) (int, char **, char **), int argc,
 
71
                      char **argv, void (*init) (void), void (*fini) (void),
 
72
                      void (*rtld_fini) (void), void *stack_end)
 
73
*/
 
74
        
 
75
        .text
 
76
        .globl ENTRY_POINT
 
77
        .type ENTRY_POINT,@function
 
78
ENTRY_POINT:
 
79
#ifdef __PIC__
 
80
        SETUP_GPX($0)
 
81
        SETUP_GPX64($25,$0)
 
82
#else
 
83
        PTR_LA $28, _gp         /* Setup GP correctly if we're non-PIC.  */
 
84
        move $31, $0
 
85
#endif
 
86
 
 
87
        PTR_LA $4, main         /* main */
 
88
        PTR_L $5, 0($29)                /* argc */
 
89
        PTR_ADDIU $6, $29, PTRSIZE      /* argv  */
 
90
        
 
91
        /* Allocate space on the stack for seven arguments (o32 only)
 
92
           and make sure the stack is aligned to double words (8 bytes) 
 
93
           on o32 and quad words (16 bytes) on n32 and n64.  */
 
94
        
 
95
        and $29, -2 * SZREG
 
96
#if _MIPS_SIM == _ABIO32
 
97
        PTR_SUBIU $29, 32
 
98
#endif
 
99
        PTR_LA $7, __libc_csu_init              /* init */
 
100
        PTR_LA $8, __libc_csu_fini
 
101
#if _MIPS_SIM == _ABIO32
 
102
        PTR_S $8, 16($29)               /* fini */
 
103
        PTR_S $2, 20($29)               /* rtld_fini */
 
104
        PTR_S $29, 24($29)              /* stack_end */
 
105
#else
 
106
        move $9, $2             /* rtld_fini */
 
107
        move $10, $29           /* stack_end */
 
108
#endif
 
109
        jal __libc_start_main
 
110
hlt:    b hlt                   /* Crash if somehow it does return.  */
 
111
 
 
112
/* Define a symbol for the first piece of initialized data.  */
 
113
        .data
 
114
        .globl __data_start
 
115
__data_start:
 
116
        .long 0
 
117
        .weak data_start
 
118
        data_start = __data_start