Mercurial > sdl-ios-xcode
annotate src/hermes/x86_main.asm @ 1166:da33b7e6d181
Date: Tue, 1 Nov 2005 20:25:10 +0100
From: Dirk Mueller
Subject: [PATCH] build SDL with nonexecutable stack
libSDL is by default marked with an executable stack, which it doesn't
actually need. the reason for this is that there are assembler files in the
source tree not properly annotated with the "noexec stack" section. As such
the linker does a safe-fallback and marks the whole lib as "requires
executable stack".
the patch below removes this by adding annotations. As far as I can see it
shouldn't break anything.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 01 Nov 2005 23:19:59 +0000 |
parents | 74212992fb08 |
children | 2d6dc7de1145 |
rev | line source |
---|---|
0 | 1 ; |
2 ; x86 format converters for HERMES | |
3 ; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at) | |
4 ; This source code is licensed under the GNU LGPL | |
5 ; | |
6 ; Please refer to the file COPYING.LIB contained in the distribution for | |
7 ; licensing conditions | |
8 ; | |
9 ; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission | |
10 ; | |
11 | |
12 BITS 32 | |
13 | |
14 GLOBAL _ConvertX86 | |
15 GLOBAL _x86return | |
16 | |
17 GLOBAL _Hermes_X86_CPU | |
18 | |
1166
da33b7e6d181
Date: Tue, 1 Nov 2005 20:25:10 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
19 SECTION .note.GNU-stack noalloc progbits noexec nowrite |
0 | 20 SECTION .data |
21 | |
22 cpu_flags dd 0 | |
23 | |
24 | |
25 SECTION .text | |
26 | |
27 ;; _ConvertX86: | |
28 ;; [ESP+8] ConverterInfo* | |
29 ;; -------------------------------------------------------------------------- | |
30 ;; ConverterInfo (ebp+..) | |
31 ;; 0: void *s_pixels | |
32 ;; 4: int s_width | |
33 ;; 8: int s_height | |
34 ;; 12: int s_add | |
35 ;; 16: void *d_pixels | |
36 ;; 20: int d_width | |
37 ;; 24: int d_height | |
38 ;; 28: int d_add | |
39 ;; 32: void (*converter_function)() | |
40 ;; 36: int32 *lookup | |
41 | |
42 _ConvertX86: | |
43 push ebp | |
44 mov ebp,esp | |
45 | |
46 ; Save the registers used by the blitters, necessary for optimized code | |
47 pusha | |
48 | |
49 mov eax,[ebp+8] | |
50 | |
51 cmp dword [eax+4],BYTE 0 | |
52 je endconvert | |
53 | |
54 mov ebp,eax | |
55 | |
56 mov esi,[ebp+0] | |
57 mov edi,[ebp+16] | |
58 | |
59 y_loop: | |
60 mov ecx,[ebp+4] | |
61 | |
62 jmp [ebp+32] | |
63 | |
64 _x86return: | |
65 add esi,[ebp+12] | |
66 add edi,[ebp+28] | |
67 | |
68 dec dword [ebp+8] | |
69 jnz y_loop | |
70 | |
71 ; Restore the registers used by the blitters, necessary for optimized code | |
72 popa | |
73 | |
74 pop ebp | |
75 | |
76 endconvert: | |
77 ret | |
78 | |
79 | |
80 | |
81 ;; Hermes_X86_CPU returns the CPUID flags in eax | |
82 | |
83 _Hermes_X86_CPU: | |
84 pushfd | |
85 pop eax | |
86 | |
87 mov ecx,eax | |
88 | |
89 xor eax,040000h | |
90 push eax | |
91 | |
92 popfd | |
93 pushfd | |
94 | |
95 pop eax | |
96 xor eax,ecx | |
97 jz .L1 ; Processor is 386 | |
98 | |
99 push ecx | |
100 popfd | |
101 | |
102 mov eax,ecx | |
103 xor eax,200000h | |
104 | |
105 push eax | |
106 popfd | |
107 pushfd | |
108 | |
109 pop eax | |
110 xor eax,ecx | |
111 je .L1 | |
112 | |
113 pusha | |
114 | |
115 mov eax,1 | |
116 cpuid | |
117 | |
118 mov [cpu_flags],edx | |
119 | |
120 popa | |
121 | |
122 mov eax,[cpu_flags] | |
123 | |
124 .L1: | |
125 ret |