1 | Index: gcc/gcc/config.gcc
|
---|
2 | ===================================================================
|
---|
3 | --- gcc/gcc/config.gcc (revision 37497)
|
---|
4 | +++ gcc/gcc/config.gcc (working copy)
|
---|
5 | @@ -1063,8 +1063,9 @@
|
---|
6 | extra_parts='crtbegin.o crtend.o'
|
---|
7 | ;;
|
---|
8 | x86_64-*-haiku*)
|
---|
9 | - tmake_file='t-haiku i386/t-crtpic'
|
---|
10 | - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h haiku.h i386/x86-64.h i386/haiku64.h"
|
---|
11 | + tmake_file='t-haiku i386/t-haiku64 i386/t-crtpic'
|
---|
12 | + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h haiku.h i386/haiku64.h"
|
---|
13 | + extra_parts='crtbegin.o crtend.o'
|
---|
14 | ;;
|
---|
15 | i[34567]86-*-netbsdelf*)
|
---|
16 | tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h netbsd.h netbsd-elf.h i386/netbsd-elf.h"
|
---|
17 | Index: gcc/gcc/config/i386/haiku64.h
|
---|
18 | ===================================================================
|
---|
19 | --- gcc/gcc/config/i386/haiku64.h (revision 37497)
|
---|
20 | +++ gcc/gcc/config/i386/haiku64.h (working copy)
|
---|
21 | @@ -20,7 +20,7 @@
|
---|
22 | Boston, MA 02111-1307, USA. */
|
---|
23 |
|
---|
24 |
|
---|
25 | -#if TARGET_64BIT_DEFAULT
|
---|
26 | +#if TARGET_64BIT
|
---|
27 | #define TARGET_VERSION fprintf (stderr, " (x86-64 Haiku/ELF)");
|
---|
28 | #else
|
---|
29 | #define TARGET_VERSION fprintf (stderr, " (i386 Haiku/ELF)");
|
---|
30 | @@ -35,21 +35,46 @@
|
---|
31 | #undef DEFAULT_PCC_STRUCT_RETURN
|
---|
32 | #define DEFAULT_PCC_STRUCT_RETURN 1
|
---|
33 |
|
---|
34 | +#undef DBX_REGISTER_NUMBER
|
---|
35 | +#define DBX_REGISTER_NUMBER(n) \
|
---|
36 | + (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
|
---|
37 | +
|
---|
38 | +#if TARGET_64BIT
|
---|
39 | #define TARGET_OS_CPP_BUILTINS() \
|
---|
40 | do \
|
---|
41 | { \
|
---|
42 | builtin_define ("__HAIKU__"); \
|
---|
43 | + builtin_define ("__x86_64__"); \
|
---|
44 | builtin_define ("__stdcall=__attribute__((__stdcall__))"); \
|
---|
45 | builtin_define ("__cdecl=__attribute__((__cdecl__))"); \
|
---|
46 | - builtin_assert ("system=haiku"); \
|
---|
47 | + builtin_assert ("system=haiku"); \
|
---|
48 | /* Haiku apparently doesn't support merging of symbols across shared \
|
---|
49 | object boundaries. Hence we need to explicitly specify that \
|
---|
50 | type_infos are not merged, so that they get compared by name \
|
---|
51 | instead of by pointer. */ \
|
---|
52 | - builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \
|
---|
53 | - builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0"); \
|
---|
54 | + builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \
|
---|
55 | + builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0"); \
|
---|
56 | } \
|
---|
57 | while (0)
|
---|
58 | +#else
|
---|
59 | +#define TARGET_OS_CPP_BUILTINS() \
|
---|
60 | + do \
|
---|
61 | + { \
|
---|
62 | + builtin_define ("__HAIKU__"); \
|
---|
63 | + builtin_define ("__INTEL__"); \
|
---|
64 | + builtin_define ("__X86__"); \
|
---|
65 | + builtin_define ("__stdcall=__attribute__((__stdcall__))"); \
|
---|
66 | + builtin_define ("__cdecl=__attribute__((__cdecl__))"); \
|
---|
67 | + builtin_assert ("system=haiku"); \
|
---|
68 | + /* Haiku apparently doesn't support merging of symbols across shared \
|
---|
69 | + object boundaries. Hence we need to explicitly specify that \
|
---|
70 | + type_infos are not merged, so that they get compared by name \
|
---|
71 | + instead of by pointer. */ \
|
---|
72 | + builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \
|
---|
73 | + builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0"); \
|
---|
74 | + } \
|
---|
75 | + while (0)
|
---|
76 | +#endif
|
---|
77 |
|
---|
78 | /* Provide a LINK_SPEC appropriate for Haiku. Here we provide support
|
---|
79 | for the special GCC options -static and -shared, which allow us to
|
---|
80 | @@ -57,5 +82,59 @@
|
---|
81 | combinations of options at link-time. */
|
---|
82 |
|
---|
83 | #undef LINK_SPEC
|
---|
84 | -#define LINK_SPEC "-m elf_x86_64_haiku -shared -Bsymbolic %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}"
|
---|
85 | +#if TARGET_64BIT
|
---|
86 | +#define LINK_SPEC "-m elf_x86_64 -z max-page-size=0x1000 -shared -Bsymbolic %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}"
|
---|
87 | +#else
|
---|
88 | +#define LINK_SPEC "-m elf_i386_haiku -shared -Bsymbolic %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}"
|
---|
89 | +#endif
|
---|
90 |
|
---|
91 | +
|
---|
92 | +/* A C statement (sans semicolon) to output to the stdio stream
|
---|
93 | + FILE the assembler definition of uninitialized global DECL named
|
---|
94 | + NAME whose size is SIZE bytes and alignment is ALIGN bytes.
|
---|
95 | + Try to use asm_output_aligned_bss to implement this macro. */
|
---|
96 | +
|
---|
97 | +#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
|
---|
98 | + asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
|
---|
99 | +
|
---|
100 | +/* A C statement to output to the stdio stream FILE an assembler
|
---|
101 | + command to advance the location counter to a multiple of 1<<LOG
|
---|
102 | + bytes if it is within MAX_SKIP bytes.
|
---|
103 | +
|
---|
104 | + This is used to align code labels according to Intel recommendations. */
|
---|
105 | +
|
---|
106 | +#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
|
---|
107 | +#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
|
---|
108 | + if ((LOG)!=0) \
|
---|
109 | + if ((MAX_SKIP)==0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
|
---|
110 | + else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP))
|
---|
111 | +#endif
|
---|
112 | +
|
---|
113 | +
|
---|
114 | +/* Output assembler code to FILE to call the profiler. */
|
---|
115 | +#define NO_PROFILE_COUNTERS 1
|
---|
116 | +
|
---|
117 | +#undef ASM_SPEC
|
---|
118 | +#define ASM_SPEC "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} \
|
---|
119 | + %{Wa,*:%*} %{m32:--32} %{m64:--64}"
|
---|
120 | +
|
---|
121 | +#undef ASM_OUTPUT_ALIGNED_COMMON
|
---|
122 | +#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
|
---|
123 | + x86_elf_aligned_common (FILE, NAME, SIZE, ALIGN);
|
---|
124 | +
|
---|
125 | +
|
---|
126 | +/* i386 System V Release 4 uses DWARF debugging info.
|
---|
127 | + x86-64 ABI specifies DWARF2. */
|
---|
128 | +#if TARGET_64BIT
|
---|
129 | + #define DWARF2_DEBUGGING_INFO 1
|
---|
130 | + #define DWARF2_UNWIND_INFO 1
|
---|
131 | +
|
---|
132 | + #undef PREFERRED_DEBUGGING_TYPE
|
---|
133 | + #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
|
---|
134 | +
|
---|
135 | + #undef TARGET_ASM_SELECT_SECTION
|
---|
136 | + #define TARGET_ASM_SELECT_SECTION x86_64_elf_select_section
|
---|
137 | +
|
---|
138 | + #undef TARGET_ASM_UNIQUE_SECTION
|
---|
139 | + #define TARGET_ASM_UNIQUE_SECTION x86_64_elf_unique_section
|
---|
140 | +#endif
|
---|
141 | Index: gcc/gcc/config/i386/t-haiku64
|
---|
142 | ===================================================================
|
---|
143 | --- gcc/gcc/config/i386/t-haiku64 (revision 0)
|
---|
144 | +++ gcc/gcc/config/i386/t-haiku64 (revision 0)
|
---|
145 | @@ -0,0 +1,3 @@
|
---|
146 | +MULTILIB_OPTIONS = m32
|
---|
147 | +MULTILIB_DIRNAMES = legacy
|
---|
148 | +MULTILIB_OSDIRNAMES = legacy
|
---|