aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorGareth Rees2013-05-23 19:35:47 +0100
committerGareth Rees2013-05-23 19:35:47 +0100
commit3c48eff73029b522a2b1af7652bab5e7afdc8784 (patch)
treea9216e0fff07817a818fdbbe91e91ad63f1bf6dc /mps/code
parentef4d65299de9e034c5fad2210eacb74276ba81b1 (diff)
downloademacs-3c48eff73029b522a2b1af7652bab5e7afdc8784.tar.gz
emacs-3c48eff73029b522a2b1af7652bab5e7afdc8784.zip
On platform lii6gc, the mps needs a bunch of symbols which are not defined if the -ansi option is given to gcc. these can be enabled by defining features like _gnu_source, but all headers share a common set of features (via <feature.h>) and so all sources in the same compilation unit must turn on the same set of features. make sure this happens by turning on the features in config.h (not mpstd.h).
Remove <string.h> from mpsi.h (not needed). Copied from Perforce Change: 182124 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/config.h31
-rw-r--r--mps/code/lockli.c6
-rw-r--r--mps/code/mpsi.c1
-rw-r--r--mps/code/mpstd.h14
-rw-r--r--mps/code/prmci3li.c9
-rw-r--r--mps/code/prmci6li.c9
-rw-r--r--mps/code/prmcix.h7
-rw-r--r--mps/code/pthrdext.c6
-rw-r--r--mps/code/vmix.c19
9 files changed, 60 insertions, 42 deletions
diff --git a/mps/code/config.h b/mps/code/config.h
index 5172f57a9da..fefd57ed266 100644
--- a/mps/code/config.h
+++ b/mps/code/config.h
@@ -330,6 +330,37 @@
330#define VMParamSize (sizeof(Word)) 330#define VMParamSize (sizeof(Word))
331 331
332 332
333/* .feature.li: Linux feature specification
334 *
335 * The MPS needs the following symbols which are not defined if the
336 * -ansi option is given to GCC:
337 *
338 * Source Symbols Header Feature
339 * =========== ========================= ============= ====================
340 * lockli.c pthread_mutexattr_settype <pthread.h> _XOPEN_SOURCE >= 500
341 * prmci3li.c REG_EAX etc. <ucontext.h> _GNU_SOURCE
342 * prmci6li.c REG_RAX etc. <ucontext.h> _GNU_SOURCE
343 * prmcix.h stack_t, siginfo_t <signal.h> _XOPEN_SOURCE
344 * pthrdext.c sigaction etc. <signal.h> _XOPEN_SOURCE
345 * vmix.c MAP_ANON <sys/mman.h> _GNU_SOURCE
346 *
347 * Unfortunately it's not possible to localize these feature
348 * specifications around the individual headers: all headers share a
349 * common set of features (via <feature.h>) and so all sources in the
350 * same compilation unit must turn on the same set of features.
351 *
352 * See "Feature Test Macros" in the GCC Manual:
353 * <http://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html>
354 */
355
356#if defined(MPS_OS_LI)
357
358#define _XOPEN_SOURCE 500
359#define _GNU_SOURCE
360
361#endif
362
363
333/* Protection Configuration see <code/prot*.c> 364/* Protection Configuration see <code/prot*.c>
334 365
335 For each architecture/OS that uses protix.c or protsgix.c, we need to 366 For each architecture/OS that uses protix.c or protsgix.c, we need to
diff --git a/mps/code/lockli.c b/mps/code/lockli.c
index 8bd03649bbf..06437b5b531 100644
--- a/mps/code/lockli.c
+++ b/mps/code/lockli.c
@@ -1,7 +1,7 @@
1/* lockli.c: RECURSIVE LOCKS FOR POSIX SYSTEMS 1/* lockli.c: RECURSIVE LOCKS FOR POSIX SYSTEMS
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license.
5 * 5 *
6 * .linux: This implementation currently just supports LinuxThreads 6 * .linux: This implementation currently just supports LinuxThreads
7 * (platform MPS_OS_LI), Single Unix i/f. 7 * (platform MPS_OS_LI), Single Unix i/f.
@@ -26,7 +26,7 @@
26#include "lock.h" 26#include "lock.h"
27#include "config.h" 27#include "config.h"
28 28
29#include <pthread.h> 29#include <pthread.h> /* see .feature.li in config.h */
30#include <semaphore.h> 30#include <semaphore.h>
31#include <errno.h> 31#include <errno.h>
32 32
@@ -259,7 +259,7 @@ void LockReleaseGlobal(void)
259 259
260/* C. COPYRIGHT AND LICENSE 260/* C. COPYRIGHT AND LICENSE
261 * 261 *
262 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>. 262 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
263 * All rights reserved. This is an open source license. Contact 263 * All rights reserved. This is an open source license. Contact
264 * Ravenbrook for commercial licensing options. 264 * Ravenbrook for commercial licensing options.
265 * 265 *
diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c
index 746ba3e712d..e89577f9c67 100644
--- a/mps/code/mpsi.c
+++ b/mps/code/mpsi.c
@@ -53,7 +53,6 @@
53#include "mpsavm.h" 53#include "mpsavm.h"
54 54
55#include <stdarg.h> 55#include <stdarg.h>
56#include <string.h>
57 56
58 57
59SRCID(mpsi, "$Id$"); 58SRCID(mpsi, "$Id$");
diff --git a/mps/code/mpstd.h b/mps/code/mpstd.h
index 8298e98be26..410d7690f3b 100644
--- a/mps/code/mpstd.h
+++ b/mps/code/mpstd.h
@@ -1,7 +1,7 @@
1/* mpstd.h: RAVENBROOK MEMORY POOL SYSTEM TARGET DETECTION 1/* mpstd.h: RAVENBROOK MEMORY POOL SYSTEM TARGET DETECTION
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license.
5 * Portions copyright (C) 2001 Global Graphics Software. 5 * Portions copyright (C) 2001 Global Graphics Software.
6 * 6 *
7 * Detect the target platform using predefined preprocessor symbols 7 * Detect the target platform using predefined preprocessor symbols
@@ -156,12 +156,6 @@
156#define MPS_WORD_SHIFT 5 156#define MPS_WORD_SHIFT 5
157#define MPS_PF_ALIGN 4 157#define MPS_PF_ALIGN 4
158 158
159#ifndef _REENTRANT /* it's also defined by cc -pthread */
160#define _REENTRANT /* defines, e.g., pthread_mutexattr_settype */
161#endif
162#define _XOPEN_SOURCE 500 /* to get POSIX signal handling */
163#define _GNU_SOURCE /* to get register numbers for prmci3li.c */
164
165 159
166/* GCC 4.6.3, gcc -E -dM */ 160/* GCC 4.6.3, gcc -E -dM */
167 161
@@ -180,12 +174,6 @@
180#define MPS_WORD_SHIFT 6 174#define MPS_WORD_SHIFT 6
181#define MPS_PF_ALIGN 8 175#define MPS_PF_ALIGN 8
182 176
183#ifndef _REENTRANT /* it's also defined by cc -pthread */
184#define _REENTRANT /* defines, e.g., pthread_mutexattr_settype */
185#endif
186#define _XOPEN_SOURCE 500 /* to get POSIX signal handling */
187#define _GNU_SOURCE /* to get register numbers for prmci3li.c */
188
189 177
190/* GCC 2.95.3, gcc -E -dM */ 178/* GCC 2.95.3, gcc -E -dM */
191 179
diff --git a/mps/code/prmci3li.c b/mps/code/prmci3li.c
index 5418a2ccd35..894df50e5f2 100644
--- a/mps/code/prmci3li.c
+++ b/mps/code/prmci3li.c
@@ -1,7 +1,7 @@
1/* prmci3li.c: PROTECTION MUTATOR CONTEXT INTEL 386 (LINUX) 1/* prmci3li.c: PROTECTION MUTATOR CONTEXT INTEL 386 (LINUX)
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license.
5 * 5 *
6 * .purpose: This module implements the part of the protection module 6 * .purpose: This module implements the part of the protection module
7 * that decodes the MutatorFaultContext. 7 * that decodes the MutatorFaultContext.
@@ -41,8 +41,9 @@ MRef Prmci3AddressHoldingReg(MutatorFaultContext mfc, unsigned int regnum)
41 41
42 /* .source.i486 */ 42 /* .source.i486 */
43 /* .assume.regref */ 43 /* .assume.regref */
44 /* The REG_EAX etc. symbols are only present if _GNU_SOURCE is defined. 44 /* The register numbers (REG_EAX etc.) are defined in <ucontext.h>
45 Currently this is in lii3gc.gmk in PFMDEFS. */ 45 but only if _GNU_SOURCE is defined: see .feature.li in
46 config.h. */
46 /* TODO: The current arrangement of the fix operation (taking a Ref *) 47 /* TODO: The current arrangement of the fix operation (taking a Ref *)
47 forces us to pun these registers (actually `int` on LII3GC). We can 48 forces us to pun these registers (actually `int` on LII3GC). We can
48 suppress the warning my casting through `char *` and this might make 49 suppress the warning my casting through `char *` and this might make
@@ -106,7 +107,7 @@ Res MutatorFaultContextScan(ScanState ss, MutatorFaultContext mfc)
106 107
107/* C. COPYRIGHT AND LICENSE 108/* C. COPYRIGHT AND LICENSE
108 * 109 *
109 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>. 110 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
110 * All rights reserved. This is an open source license. Contact 111 * All rights reserved. This is an open source license. Contact
111 * Ravenbrook for commercial licensing options. 112 * Ravenbrook for commercial licensing options.
112 * 113 *
diff --git a/mps/code/prmci6li.c b/mps/code/prmci6li.c
index 48312e55aaa..6bba840928e 100644
--- a/mps/code/prmci6li.c
+++ b/mps/code/prmci6li.c
@@ -1,7 +1,7 @@
1/* prmci6li.c: PROTECTION MUTATOR CONTEXT x64 (LINUX) 1/* prmci6li.c: PROTECTION MUTATOR CONTEXT x64 (LINUX)
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license.
5 * 5 *
6 * .purpose: This module implements the part of the protection module 6 * .purpose: This module implements the part of the protection module
7 * that decodes the MutatorFaultContext. 7 * that decodes the MutatorFaultContext.
@@ -41,8 +41,9 @@ MRef Prmci6AddressHoldingReg(MutatorFaultContext mfc, unsigned int regnum)
41 gregs = (Word *)&mfc->ucontext->uc_mcontext.gregs; 41 gregs = (Word *)&mfc->ucontext->uc_mcontext.gregs;
42 42
43 /* .assume.regref */ 43 /* .assume.regref */
44 /* The REG_EAX etc. symbols are only present if _GNU_SOURCE is defined. 44 /* The register numbers (REG_RAX etc.) are defined in <ucontext.h>
45 * Currently this is in lii6gc.gmk in PFMDEFS. */ 45 but only if _GNU_SOURCE is defined: see .feature.li in
46 config.h. */
46 switch (regnum) { 47 switch (regnum) {
47 case 0: return &gregs[REG_RAX]; 48 case 0: return &gregs[REG_RAX];
48 case 1: return &gregs[REG_RCX]; 49 case 1: return &gregs[REG_RCX];
@@ -110,7 +111,7 @@ Res MutatorFaultContextScan(ScanState ss, MutatorFaultContext mfc)
110 111
111/* C. COPYRIGHT AND LICENSE 112/* C. COPYRIGHT AND LICENSE
112 * 113 *
113 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>. 114 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
114 * All rights reserved. This is an open source license. Contact 115 * All rights reserved. This is an open source license. Contact
115 * Ravenbrook for commercial licensing options. 116 * Ravenbrook for commercial licensing options.
116 * 117 *
diff --git a/mps/code/prmcix.h b/mps/code/prmcix.h
index a5781118607..684be0d452e 100644
--- a/mps/code/prmcix.h
+++ b/mps/code/prmcix.h
@@ -1,7 +1,7 @@
1/* prmcix.h: PROTECTION MUTATOR CONTEXT (UNIX) 1/* prmcix.h: PROTECTION MUTATOR CONTEXT (UNIX)
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license.
5 * 5 *
6 * .readership: MPS developers. 6 * .readership: MPS developers.
7 */ 7 */
@@ -11,7 +11,8 @@
11 11
12#include "mpm.h" 12#include "mpm.h"
13 13
14#include <ucontext.h> 14#include <signal.h> /* siginfo_t -- see .feature.li in config.h */
15#include <ucontext.h> /* ucontext_t */
15 16
16typedef struct MutatorFaultContextStruct { /* Protection fault context data */ 17typedef struct MutatorFaultContextStruct { /* Protection fault context data */
17 siginfo_t *info; 18 siginfo_t *info;
@@ -24,7 +25,7 @@ typedef struct MutatorFaultContextStruct { /* Protection fault context data */
24 25
25/* C. COPYRIGHT AND LICENSE 26/* C. COPYRIGHT AND LICENSE
26 * 27 *
27 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>. 28 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
28 * All rights reserved. This is an open source license. Contact 29 * All rights reserved. This is an open source license. Contact
29 * Ravenbrook for commercial licensing options. 30 * Ravenbrook for commercial licensing options.
30 * 31 *
diff --git a/mps/code/pthrdext.c b/mps/code/pthrdext.c
index 934a0a646a0..8a027edb3b7 100644
--- a/mps/code/pthrdext.c
+++ b/mps/code/pthrdext.c
@@ -1,7 +1,7 @@
1/* pthreadext.c: POSIX THREAD EXTENSIONS 1/* pthreadext.c: POSIX THREAD EXTENSIONS
2 * 2 *
3 * $Id$ 3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license. 4 * Copyright (c) 2001-2013 Ravenbrook Limited. See end of file for license.
5 * 5 *
6 * .purpose: Provides extension to Pthreads. 6 * .purpose: Provides extension to Pthreads.
7 * 7 *
@@ -17,7 +17,7 @@
17 17
18#include <pthread.h> 18#include <pthread.h>
19#include <sched.h> 19#include <sched.h>
20#include <signal.h> 20#include <signal.h> /* see .feature.li in config.h */
21#include <semaphore.h> 21#include <semaphore.h>
22#include <errno.h> 22#include <errno.h>
23#include <stdio.h> 23#include <stdio.h>
@@ -365,7 +365,7 @@ unlock:
365 365
366/* C. COPYRIGHT AND LICENSE 366/* C. COPYRIGHT AND LICENSE
367 * 367 *
368 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>. 368 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
369 * All rights reserved. This is an open source license. Contact 369 * All rights reserved. This is an open source license. Contact
370 * Ravenbrook for commercial licensing options. 370 * Ravenbrook for commercial licensing options.
371 * 371 *
diff --git a/mps/code/vmix.c b/mps/code/vmix.c
index 2b7afb514c2..9b06f09b032 100644
--- a/mps/code/vmix.c
+++ b/mps/code/vmix.c
@@ -18,11 +18,11 @@
18 * (MAP_PRIVATE) mapping with the flag MAP_ANON. 18 * (MAP_PRIVATE) mapping with the flag MAP_ANON.
19 * 19 *
20 * .non-standard: Note that the MAP_ANON flag is non-standard; it is 20 * .non-standard: Note that the MAP_ANON flag is non-standard; it is
21 * available on Darwin and FreeBSD. .non-standard.linux: Linux 21 * available on Darwin and FreeBSD. .non-standard.linux: Linux seems
22 * seems to use MAP_ANONYMOUS instead. Some Linux systems make MAP_ANON 22 * to use MAP_ANONYMOUS instead. Some Linux systems make MAP_ANON
23 * available and deprecate it. .non-standard.sesame: On Linux getting 23 * available and deprecate it. .non-standard.sesame: On Linux getting
24 * a definition of MAP_ANON requires a macro to be defined prior to 24 * a definition of MAP_ANON requires a _BSD_SOURCE to be defined prior
25 * <sys/mman.h>. 25 * to <sys/mman.h>; see config.h.
26 * 26 *
27 * .assume.not-last: The implementation of VMCreate assumes that 27 * .assume.not-last: The implementation of VMCreate assumes that
28 * mmap() will not choose a region which contains the last page 28 * mmap() will not choose a region which contains the last page
@@ -38,12 +38,11 @@
38 * seem to be a problem. 38 * seem to be a problem.
39 */ 39 */
40 40
41/* .non-standard.sesame */ 41#include "mpm.h"
42#define _BSD_SOURCE 1
43 42
44/* for mmap(2), munmap(2) */ 43/* for mmap(2), munmap(2) */
45#include <sys/types.h> 44#include <sys/types.h>
46#include <sys/mman.h> 45#include <sys/mman.h> /* see .feature.li in config.h */
47 46
48/* for errno(2) */ 47/* for errno(2) */
49#include <errno.h> 48#include <errno.h>
@@ -51,8 +50,6 @@
51/* for getpagesize(3) */ 50/* for getpagesize(3) */
52#include <unistd.h> 51#include <unistd.h>
53 52
54#include "mpm.h"
55
56 53
57#if !defined(MPS_OS_FR) && !defined(MPS_OS_XC) && !defined(MPS_OS_LI) 54#if !defined(MPS_OS_FR) && !defined(MPS_OS_XC) && !defined(MPS_OS_LI)
58#error "vmix.c is Unix-like specific, currently MPS_OS_FR XC LI" 55#error "vmix.c is Unix-like specific, currently MPS_OS_FR XC LI"
@@ -322,7 +319,7 @@ void VMUnmap(VM vm, Addr base, Addr limit)
322 319
323/* C. COPYRIGHT AND LICENSE 320/* C. COPYRIGHT AND LICENSE
324 * 321 *
325 * Copyright (C) 2001-2007 Ravenbrook Limited <http://www.ravenbrook.com/>. 322 * Copyright (C) 2001-2013 Ravenbrook Limited <http://www.ravenbrook.com/>.
326 * All rights reserved. This is an open source license. Contact 323 * All rights reserved. This is an open source license. Contact
327 * Ravenbrook for commercial licensing options. 324 * Ravenbrook for commercial licensing options.
328 * 325 *