native_client/nacl-toolchain.git
3 years ago[gcc] Replace rsp/rbp lea base with esp/ebp master
Evgeny Eltsin [Wed, 19 Jan 2011 16:36:26 +0000 (19:36 +0300)]
[gcc] Replace rsp/rbp lea base with esp/ebp

This is yet another fix for POINTERS_EXTEND_UNSIGNED > 0 problem of keeping high part of rsp/rbp.

In addition, minor fix for previous change - do not assert if writing rsp/rbp into memory (probably spill)?

Test (-O1) must return 0 but returns high part of rsp without the fix:

struct StringRef {
 const char *Data;
 unsigned Length;
};

// Prevent inlining with 'weak' attribute
int print_size(struct StringRef Data) __attribute__((weak));

int print_size(struct StringRef Data) {
 return Data.Length;
}

int main() {
 char str[6]; // NEEDED!

 struct StringRef s;
 s.Data = str + 3; // NEEDED!
 s.Length = 0;

 return print_size(s);
}

BUG=http://code.google.com/p/nativeclient/issues/detail?id=1304
TEST=see above

Review URL: http://codereview.chromium.org/6271009

3 years ago[gcc] Replace rsp/rbp mov source with esp/ebp
Evgeny Eltsin [Tue, 18 Jan 2011 18:40:19 +0000 (21:40 +0300)]
[gcc] Replace rsp/rbp mov source with esp/ebp

The problem is that with POINTERS_EXTEND_UNSIGNED > 0 gcc considers high part of rsp and rbp to be zero, which is not true. This seems to be backend design flaw.

Fixing this by changing POINTERS_EXTEND_UNSIGNED to -1 and defining ptr_extend solves the problem but is likely to hit the performance of pointer arithmetics that does not involve rsp and rbp.

This fix fights the particular and most common case when rsp or rbp are sources of the mov instruction, by forcing this instructions to operate on low parts of the registers only. This is not the complete solution, and more changes will follow.

Test (-O1) must return 0 but returns high part of rsp without the fix:

struct StringRef {
  const char *Data;
  unsigned Length;
};

// Prevent inlining with 'weak' attribute
int print_size(struct StringRef Data) __attribute__((weak));

int print_size(struct StringRef Data) {
  return Data.Length;
}

int main() {
  char str[6]; // NEEDED!

  struct StringRef s;
  s.Data = str; // NEEDED!
  s.Length = 0;

  return print_size(s);
}

BUG=http://code.google.com/p/nativeclient/issues/detail?id=1304
TEST=see above

Review URL: http://codereview.chromium.org/6304009

3 years ago[binutils] Fix tls transition check from R_X86_64_GOTTPOFF
Evgeny Eltsin [Wed, 29 Dec 2010 16:12:56 +0000 (19:12 +0300)]
[binutils] Fix tls transition check from R_X86_64_GOTTPOFF

x86_64 linker expects either movq or addq there, while for NaCl we generate movl or addl.
Fixed the check to accept movl and addl, the rewrite itself seems to work as is.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=1278
TEST=

Review URL: http://codereview.chromium.org/6025010

3 years ago[gcc] Yet another gen_lowpart code confused by prt_mode != Pmode
Evgeny Eltsin [Fri, 24 Dec 2010 15:25:41 +0000 (18:25 +0300)]
[gcc] Yet another gen_lowpart code confused by prt_mode != Pmode

Test from David Meyer, 64-bit mode with -O1:

typedef unsigned int size_t;

extern "C" {
  size_t strlen (const char *);
};

class StringRef {
private:
  const char *Data;
  size_t Length;

public:
 StringRef(const char *Str)
    : Data(Str), Length(::strlen(Str)) {}
};

StringRef GetDLLSuffix() {
  return &(".so"[1]);
}

Reports internal error while trying to replace Pmode register with ptr_mode CONST.

The change fixes the origin of such a CONST in gen_lowpart_for_combine. This is kinda hacky and clearly not upstreamable...

BUG=http://code.google.com/p/nativeclient/issues/detail?id=1279
TEST=see above

Review URL: http://codereview.chromium.org/5968010

3 years ago[binutils] Force assembler to align code section size
Evgeny Eltsin [Tue, 21 Dec 2010 18:06:19 +0000 (21:06 +0300)]
[binutils] Force assembler to align code section size

Assembler pads code sections with NOPs, which is exactly what we need for NaCl.

This change introduces NOP padding at the end of the code section. Whitout this change, linker may add zero padding to code sections, which does not validate.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=499
TEST=code sections in object files should be padded with NOPs at the end when needed

Review URL: http://codereview.chromium.org/6001005

3 years ago[binutils] allow immediates in naclrest{bp,sp}
Egor Pasko [Wed, 8 Dec 2010 16:02:41 +0000 (19:02 +0300)]
[binutils] allow immediates in naclrest{bp,sp}

Originally these commands would have produced an error in nacl64-as:
  naclrestbp $0, %r15
  naclrestsp $0, %r15
Error: suffix or operands invalid for `naclrestbp'

8bit immediates would be extended to 32bit.

BUG=
TEST=

Review URL: http://codereview.chromium.org/5648005

3 years ago[noupstream] add codereview.settings
Egor Pasko [Thu, 25 Nov 2010 15:24:57 +0000 (18:24 +0300)]
[noupstream] add codereview.settings

BUG=none
TEST=none

Review URL: http://codereview.chromium.org/5367005

3 years ago[binutils] Move .got.plt section to the data segment.
Andrey Khalyavin [Tue, 23 Nov 2010 12:57:01 +0000 (15:57 +0300)]
[binutils] Move .got.plt section to the data segment.
BUG=http://code.google.com/p/nativeclient/issues/detail?id=960

I do nothing in case of DATA_GOT, RELRO_NOW and GOTPLT variables exist during linker script generation from linker script template. The reason is that $RELRO_NOW undefines $SEPARATE_GOTPLT in the template. Case when someone sets $GOTPLT by other means is not supported. Also, we don't have $RELRO_NOW defined now.

TEST=#in /native_client/tools
make SDKLOC=/path_to_new_toolchain

./scons MODE=nacl,dbg-linux platform=x86-64 sdl=none naclsdk_mode=custom:/path_to_new_toolchain thread_test.nexe
objdump -ph ./scons-out/nacl-x86-64/staging/thread_test.nexe >~/thread_test_dump.txt

Review URL: http://codereview.chromium.org/5115005

3 years ago[binutils] Special processing of R_X86_64_32 relocations
Evgeny Eltsin [Tue, 2 Nov 2010 12:56:56 +0000 (15:56 +0300)]
[binutils] Special processing of R_X86_64_32 relocations

R_X86_64_32 relocations in NaCl64 play the same role as R_X86_64_64 in native x86_64. They should be rewritten in case relocated symbol is hidden and will not exist in statically linked binary.

R_X86_64_64 are rewritten into R_X86_64_RELATIVE using the absolute value of the symbol. Unfortunately we don't have 32-bit alternative, thus we change relocation to use section instead of symbol. Usually this rewrite produces buggy relocations (why? there is corresponding comment in bfd, but it does not explain much), but in our special case we just create valid relocations.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=1095
TEST=

Review URL: http://codereview.chromium.org/4128004

3 years ago[gcc] Add clobber FLAGS_REG to NaCl indirect jumps
Evgeny Eltsin [Wed, 20 Oct 2010 15:24:22 +0000 (19:24 +0400)]
[gcc] Add clobber FLAGS_REG to NaCl indirect jumps

Compiler must know that NaCl indirect jump clobbers FLAGS register.

For call and return this is probably not important, as FLAGS is always clobbered by call.

For computed goto and switch, this IS important, so added explicit clobber.

TEST=very hard to reproduce, we only suspect this bug was the reason for LLVM miscompilation.

BUG=

Review URL: http://codereview.chromium.org/3892003

3 years ago[binutils] fix x86-64 PLT entries
Egor Pasko [Fri, 24 Sep 2010 18:03:59 +0000 (20:03 +0200)]
[binutils] fix x86-64 PLT entries

BUG=
TEST=

Review URL: http://codereview.chromium.org/3505001

3 years ago[gcc] x86_64 TLS support refactoring
Evgeny Eltsin [Fri, 24 Sep 2010 13:58:59 +0000 (17:58 +0400)]
[gcc] x86_64 TLS support refactoring

Enable all TLS access models.

Replace misleading non-standard __tls_get_addr with newly introduced __nacl_read_tp. Standard __tls_get_addr is now used for dynamic TLS access models, as intended.

BUG=
TEST=

Review URL: http://codereview.chromium.org/3453012

3 years ago[binutils] Prevent ld from rewriting tls access sequences with calls
Evgeny Eltsin [Wed, 22 Sep 2010 14:14:07 +0000 (18:14 +0400)]
[binutils] Prevent ld from rewriting tls access sequences with calls

NaCl assembler inserts nops in front of a call for proper bundling. When linker tries to rewrite a code sequence that consists of something followed by a call, it complains about these nops.

At the moment, simply disable rewriting these sequences.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=237
TEST=

Review URL: http://codereview.chromium.org/3467009

3 years ago[gcc] Fix more addsi patterns for nacl64 PIC
Evgeny Eltsin [Fri, 10 Sep 2010 16:10:42 +0000 (20:10 +0400)]
[gcc] Fix more addsi patterns for nacl64 PIC

The change is similar to the previous one - GLibC compilation revealed more cases to handle.
Prevent define_expands and define_insns from treating ILP32 PIC symbol_ref as an immediate.

BUG=
TEST=

Review URL: http://codereview.chromium.org/3342027

3 years ago[gcc] Fix addsi patterns for nacl64 PIC
Evgeny Eltsin [Fri, 10 Sep 2010 09:41:49 +0000 (13:41 +0400)]
[gcc] Fix addsi patterns for nacl64 PIC

This is similar to a bunch of previous fixes: prevent define_expands and define_insns from treating ILP32 PIC symbol_ref as an immediate.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=872

TEST=

Review URL: http://codereview.chromium.org/3291022

3 years ago[gcc] Fix SIGSEGV in computed goto compilation.
Evgeny Eltsin [Tue, 7 Sep 2010 14:37:46 +0000 (18:37 +0400)]
[gcc] Fix SIGSEGV in computed goto compilation.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=601
TEST=

Review URL: http://codereview.chromium.org/3345011

3 years ago[noupstream] Instrument for thread suspension.
Evgeny Eltsin [Mon, 6 Sep 2010 20:32:18 +0000 (00:32 +0400)]
[noupstream] Instrument for thread suspension.

When given command line flag -finstrument-for-thread-suspension, generate instrumentation calls for function entry and back edges.

Instrumentation call now looks like:
  __nacl_suspend_thread_if_needed ();

BUG=http://code.google.com/p/nativeclient/issues/detail?id=826
TEST=

Review URL: http://codereview.chromium.org/3320011

3 years ago[gcc] Fix lea splitters for ILP32 data model
Evgeny Eltsin [Wed, 25 Aug 2010 11:12:57 +0000 (15:12 +0400)]
[gcc] Fix lea splitters for ILP32 data model

This is similar to http://codereview.chromium.org/3187016 and several previous changes.

Fixed lea splitters to disallow PIC symbol references where immediate operand is needed. Now all specs cpu2000 compile with -fPIC.

Hope the process of making these fixes should converge soon - instructions affected are instructions used for 32-bit pointer arithmetics, namely variants of add, sub and lea.

Review URL: http://codereview.chromium.org/3165059

3 years ago[gcc] Correct configure check so that it matches i686-pc-nacl
Mark Seaborn [Tue, 24 Aug 2010 20:03:46 +0000 (21:03 +0100)]
[gcc] Correct configure check so that it matches i686-pc-nacl

My earlier change was accidentally too strict, and did not match the
target configuration when it had been expanded from the argument in
"--target=nacl" to "i686-pc-nacl".

BUG=http://code.google.com/p/nativeclient/issues/detail?id=660
TEST=build full-gcc against nacl-glibc

Review URL: http://codereview.chromium.org/3190016

3 years ago[gcc] Add nacl to libstdc++'s list of glibc-based architectures
Mark Seaborn [Tue, 24 Aug 2010 15:39:34 +0000 (16:39 +0100)]
[gcc] Add nacl to libstdc++'s list of glibc-based architectures

Note that this does not affect newlib-based libstdc++ builds, for
which crossconfig.m4 is not consulted (see configure.ac).

Update "configure" by running autoconf 2.59.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=660
TEST=build full-gcc against nacl-glibc

Review URL: http://codereview.chromium.org/3181032

3 years ago[gcc] Remove old "nc" cases from libstdc++'s configure script
Mark Seaborn [Tue, 24 Aug 2010 14:39:50 +0000 (15:39 +0100)]
[gcc] Remove old "nc" cases from libstdc++'s configure script

These cases are not used, and were apparently added by changing the
generated file rather than editing the source, configure.ac.
Re-running autoconf 2.59 undoes them.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=660

Review URL: http://codereview.chromium.org/3186025

3 years ago[newlib] Don't try to implement clock(3) using times(2). NaCl provides native clock(2)
Victor Khimenko [Mon, 23 Aug 2010 21:51:23 +0000 (01:51 +0400)]
[newlib] Don't try to implement clock(3) using times(2). NaCl provides native clock(2)

Review URL: http://codereview.chromium.org/3183021

3 years ago[gcc] Fix optimized expand of ptr diff for 64-bit PIC
Evgeny Eltsin [Mon, 23 Aug 2010 12:38:16 +0000 (16:38 +0400)]
[gcc] Fix optimized expand of ptr diff for 64-bit PIC

SImode subtraction instructions use "m" contstraint for one operand and "i" constraint for another. This does not work in 64-bit PIC in nacl, as "i" allows symbol references which get rip-relative addressing.

This replaces "i" constraint with "e" contraint, where the latter does not allow symbol references except those that simply fit in 32-bits immediate.

Review URL: http://codereview.chromium.org/3187016

3 years agoDefines __gnu_linux__ and __linux__ are removed from the nacl-compiler.
Andrey Khalyavin [Thu, 19 Aug 2010 10:27:17 +0000 (14:27 +0400)]
Defines __gnu_linux__ and __linux__ are removed from the nacl-compiler.

Review URL: http://codereview.chromium.org/3149014

3 years ago[binutils] Pad PLT entries with NOPs instead of HLTs
Mark Seaborn [Tue, 17 Aug 2010 09:59:03 +0000 (10:59 +0100)]
[binutils] Pad PLT entries with NOPs instead of HLTs

nacl_dyncode_copy() now rejects instruction bundles that contain only
HLTs, so we need to change at least the 0th PLT entries.

Also fix the i386 PIC PLT entry so that it pads to the full 64 bytes.
Before, the last 4 bytes were zeroes.

BUG=http://code.google.com/p/nativeclient/issues/detail?id=820
TEST=Tested 32-bit with nacl-glibc's nacl/test.py

Review URL: http://codereview.chromium.org/3177017

3 years agoBackport CL148346 from upstream: --no-canonical-prefixes
Victor Khimenko [Fri, 13 Aug 2010 17:01:46 +0000 (21:01 +0400)]
Backport CL148346 from upstream: --no-canonical-prefixes

Review URL: http://codereview.chromium.org/3156009

3 years ago[gcc] Prevent movsi from having 2 memory operands in x86_64 PIC.
Evgeny Eltsin [Wed, 4 Aug 2010 17:08:24 +0000 (21:08 +0400)]
[gcc] Prevent movsi from having 2 memory operands in x86_64 PIC.

The cause is that rip-based symbol references are treated as constants with "i" constraint, "e" seems to do the right job.

Review URL: http://codereview.chromium.org/3013058

3 years ago[gcc] Fix nacl64_as warnings: destination and source are swapped in cmpsX...
Victor Khimenko [Fri, 30 Jul 2010 22:10:01 +0000 (02:10 +0400)]
[gcc] Fix nacl64_as warnings: destination and source are swapped in cmpsX...

Review URL: http://codereview.chromium.org/3050027

3 years ago[gcc] Fix movsw sandboxing
Victor Khimenko [Fri, 30 Jul 2010 21:56:53 +0000 (01:56 +0400)]
[gcc] Fix movsw sandboxing

Review URL: http://codereview.chromium.org/2832102

3 years ago[binutils] Use "scasb %nacl:(%rdi),%al,%r15" pseudocommand, not series of commands
Victor Khimenko [Fri, 30 Jul 2010 17:13:57 +0000 (21:13 +0400)]
[binutils] Use "scasb %nacl:(%rdi),%al,%r15" pseudocommand, not series of commands

Review URL: http://codereview.chromium.org/2870084

3 years ago[binutils] Allow "scasb %nacl:(%rdi),%al,%r15" command
Victor Khimenko [Fri, 30 Jul 2010 16:59:45 +0000 (20:59 +0400)]
[binutils] Allow "scasb %nacl:(%rdi),%al,%r15" command

Review URL: http://codereview.chromium.org/3061037

3 years ago[gcc] align structures as in x86-64
Victor Khimenko [Fri, 30 Jul 2010 14:40:20 +0000 (18:40 +0400)]
[gcc] align structures as in x86-64

Review URL: http://codereview.chromium.org/3041030

3 years ago[gcc] Remove few changes from machine-independent part.
Evgeny Eltsin [Thu, 29 Jul 2010 08:53:41 +0000 (12:53 +0400)]
[gcc] Remove few changes from machine-independent part.

This change restores explow.c and reload.c back to their original state.

This change can affect the performance, as it may limit the number of cases when lea instruction is generated.
However, the change is the "right thing" to do. Lea problems, if any, should be solved in i386-specific code.

Review URL: http://codereview.chromium.org/2825071

3 years ago[newlib] fix read sandboxing in asm functions
Victor Khimenko [Wed, 28 Jul 2010 10:44:30 +0000 (14:44 +0400)]
[newlib] fix read sandboxing in asm functions

Review URL: http://codereview.chromium.org/3056024

3 years ago[gcc] string operations: read sandboxing
Victor Khimenko [Tue, 27 Jul 2010 20:11:51 +0000 (22:11 +0200)]
[gcc] string operations: read sandboxing

Review URL: http://codereview.chromium.org/3037021

3 years ago[gcc] Fix access to extern symbols in 64-bit pic.
Evgeny Eltsin [Wed, 21 Jul 2010 18:30:14 +0000 (22:30 +0400)]
[gcc] Fix access to extern symbols in 64-bit pic.

Test that should compile:
  extern int var[2];
  int* foo() {
    return &var[2];
  }

The fix is to have the legitimized pic address in Pmode.

Review URL: http://codereview.chromium.org/3059003

3 years ago[binutils] Stop using 2MiB pages for x86-64.
Egor Pasko [Wed, 21 Jul 2010 16:27:32 +0000 (18:27 +0200)]
[binutils] Stop using 2MiB pages for x86-64.

Stop using 2MiB pages for x86-64. This finalizes the ABI so now we are using
version 8 for both IA32 and x86-64.

original change made by Victor at: http://codereview.chromium.org/2107008/show
and was lost during transition to Git

Made DATA_SEGMENT_RELRO_END macro non-empty (as in elf.sc), which is required by
glibc configure. This requires extra alignment, so be it.

Review URL: http://codereview.chromium.org/2834056

3 years ago[gcc] Fix access to local symbols in 64-bit pic.
Evgeny Eltsin [Tue, 20 Jul 2010 17:24:42 +0000 (21:24 +0400)]
[gcc] Fix access to local symbols in 64-bit pic.

This fix changes movsi template for lea to print the first operand as %a1 instead of %1. Gcc trunk has this fix in, so this change looks like a fix for gcc bug, unrelated to nacl;

This fix also changes movsi template attr of TYPE_LEA to match operand as SImode instead of DImode. Gcc trunk still has DImode, but this seems to be a bug...

Review URL: http://codereview.chromium.org/2858059

3 years ago[binutils] add naclrestsp_noflags (lea instead of add)
Jan Voung [Mon, 19 Jul 2010 23:33:18 +0000 (16:33 -0700)]
[binutils] add naclrestsp_noflags (lea instead of add)

Review URL: http://codereview.chromium.org/2858055/show

3 years ago[gcc] Revise definition for long double type.
Evgeny Eltsin [Wed, 14 Jul 2010 15:16:56 +0000 (19:16 +0400)]
[gcc] Revise definition for long double type.

Review URL: http://codereview.chromium.org/2928008

3 years ago[gcc] Make GCC complain if setjmp/longjmp builtins are encountered.
Egor Pasko [Tue, 13 Jul 2010 15:11:03 +0000 (17:11 +0200)]
[gcc] Make GCC complain if setjmp/longjmp builtins are encountered.

Redefine the builtins in c-torture/.../builtins.exp to make a lot of c-torture
tests pass. This is a dirty way to fix the tests, we will need to enable the
builtins to work with glibc once the latter ready. The purpose of this
manipulation is to reduce the amount of failing tests in the GCC testsuite and
thus make it easier to focus on more interesting failures.

Review URL: http://codereview.chromium.org/2824045

3 years ago[gcc] Fix formatting issues.
Evgeny Eltsin [Tue, 13 Jul 2010 13:11:46 +0000 (17:11 +0400)]
[gcc] Fix formatting issues.

Review URL: http://codereview.chromium.org/2891017

3 years ago[gcc] Misc cleanup.
Evgeny Eltsin [Mon, 5 Jul 2010 16:33:11 +0000 (20:33 +0400)]
[gcc] Misc cleanup.

- Use TARGET_NACL instead of flag_control_integrity;
- Kill getenv calls used for debugging nacl-specific code;
- Remove few debug printings;

Review URL: http://codereview.chromium.org/2880018

3 years ago[gcc] Allow GCC insert .cfi_startproc and .cfi_endproc.
Egor Pasko [Thu, 1 Jul 2010 14:15:12 +0000 (16:15 +0200)]
[gcc] Allow GCC insert .cfi_startproc and .cfi_endproc.

NaCl GAS supports these assembler directives. Though on Mac buildbots this
capability is not recognized due to the lack of readelf installed. Supporting
these directives is essential to have correct backtraces listed with valgrind.

BUG: http://code.google.com/p/nativeclient/issues/detail?id=663

Review URL: http://codereview.chromium.org/2805058

3 years ago[gcc] Make nacl calls CALLs.
Evgeny Eltsin [Wed, 30 Jun 2010 11:20:52 +0000 (15:20 +0400)]
[gcc] Make nacl calls CALLs.

Change nacl calls from UNSPEC (fnaddr) to CALL (MEM (UNSPEC (fnaddr))).

In places where gcc processes CALLs, we copy-pasted the code for nacl calls implemented via UNSPEC_NACLCALL. Now we remove these changes.

Review URL: http://codereview.chromium.org/2852035

3 years ago[gcc] Cleanup nacl_special_commands.
Evgeny Eltsin [Fri, 25 Jun 2010 11:55:28 +0000 (15:55 +0400)]
[gcc] Cleanup nacl_special_commands.

This seems like an artifact of an old refactoring.

Review URL: http://codereview.chromium.org/2824029

3 years ago[gcc] Kill NACL_LEA_MATCH_ADDRESS_OPERAND and insn_is_nacl_lea.
Evgeny Eltsin [Fri, 25 Jun 2010 11:52:30 +0000 (15:52 +0400)]
[gcc] Kill NACL_LEA_MATCH_ADDRESS_OPERAND and insn_is_nacl_lea.

This is a cleanup change - removing stuff made no-op by new contsraint for LEA memory operand.

Review URL: http://codereview.chromium.org/2866019

3 years ago[gcc] Use new constraint for LEA address operands.
Evgeny Eltsin [Thu, 24 Jun 2010 16:42:34 +0000 (20:42 +0400)]
[gcc] Use new constraint for LEA address operands.

The problem of processing LEA address operands is that it requires original, non-nacl address decomposition. Before this change, an original "p" constraint was used, and a global variable NACL_LEA_MATCH_ADDRESS_OPERAND signaled LEA decomposition mode to x86_decompose_address. That solution required appropriate setting of NACL_LEA_MATCH_ADDRESS_OPERAND before every call to constrain_operands.

Here I introduce new "T" constraint, and use custom decomposition function to process it. NACL_LEA_ADDRESS_OPERAND is still here, but it is not checked any more. Next change will cleanup it completely.

In fact, new address decomposition function is an original, non-nacl x86_decompose_address. For now, I just copy-paste it. Perhaps it is better to split x86_decompose_address into pieces and reuse them, but this better goes in a separate change.

Review URL: http://codereview.chromium.org/2873014

3 years ago[gcc] Eliminate control integrity pass in favor of nacl instructions generation from...
Evgeny Eltsin [Tue, 22 Jun 2010 11:30:31 +0000 (15:30 +0400)]
[gcc] Eliminate control integrity pass in favor of nacl instructions generation from the start.

This is a refactoring/cleanup CL. The advatage of this new control integrity implementation is that it touches less files and is fully contained in i386 backend. This seems to be easier to push in upstream.

Specs pass, and performance seems unaffected. I have a concern about generating unspecs at rtl expand phase, as it can possibly kill several optimizations. From the other side, it seems unlikely as optimizations that touch indirect calls and jumps are hopefully done before rtl. In any case, I have an idea how to improve this if we discover that some optimization suffers from the change.

Review URL: http://codereview.chromium.org/2850019

3 years ago[gcc] Introduce TARGET_NACL;
Evgeny Eltsin [Mon, 21 Jun 2010 15:20:52 +0000 (19:20 +0400)]
[gcc] Introduce TARGET_NACL;

Review URL: http://codereview.chromium.org/2846020

3 years ago[gcc] disable movsbw for x86-64.
Victor Khimenko [Wed, 16 Jun 2010 15:25:33 +0000 (19:25 +0400)]
[gcc] disable movsbw for x86-64.

3 years ago[newlib] build newlib with nanosleep enabled
Egor Pasko [Tue, 25 May 2010 11:32:55 +0000 (13:32 +0200)]
[newlib] build newlib with nanosleep enabled

3 years ago[gcc] Fix test-unwind.h harness
Egor Pasko [Tue, 18 May 2010 13:51:56 +0000 (15:51 +0200)]
[gcc] Fix test-unwind.h harness

x86_64 does not work without %rip and
%rdi/%rsi are not callee-saved per ABI.

3 years ago[gcc] Make copy-propagated pointers be addressed in Pmode.
Egor Pasko [Tue, 18 May 2010 13:49:36 +0000 (15:49 +0200)]
[gcc] Make copy-propagated pointers be addressed in Pmode.

BUG: http://code.google.com/p/nativeclient/issues/detail?id=453

3 years ago[gcc] Disable "bt" instruction even if optimization for size is used.
Egor Pasko [Tue, 18 May 2010 13:48:24 +0000 (15:48 +0200)]
[gcc] Disable "bt" instruction even if optimization for size is used.

3 years ago[gcc] write tableswitch relocation data to the .rodata section
Egor Pasko [Tue, 18 May 2010 13:46:03 +0000 (15:46 +0200)]
[gcc] write tableswitch relocation data to the .rodata section

by default gcc-4.4.x would put it to .text section, which does not pass the
NaCl validator.

3 years ago[gcc] Don't output "add %gs:0x0,%eax" as part of a TLS access
Egor Pasko [Tue, 18 May 2010 13:43:14 +0000 (15:43 +0200)]
[gcc] Don't output "add %gs:0x0,%eax" as part of a TLS access

This instruction is currently not accepted by the validator,
although the validator is being overly cautious here.

BUG: http://code.google.com/p/nativeclient/issues/detail?id=263

3 years ago[gcc] multilib mode: build both x86-32 and x86-64 libraries
Egor Pasko [Tue, 18 May 2010 13:35:37 +0000 (15:35 +0200)]
[gcc] multilib mode: build both x86-32 and x86-64 libraries

in the patch:
* combined linux.h and i386/linux64.h into i386/nacl.h
* removed LINUX target specifics when it was easy
* target multilib definitions: i386/t-nacl64
* config.gcc cleanup

side changes:
* define __linux__ and Co in GCC to let Chrome headers build smoothly
* disable llrint() on x86-64 in newlib to allow some examples compile on nacl64

3 years ago[gcc] Disable long double for IA32. Disable i387 for x86-64.
Egor Pasko [Tue, 18 May 2010 13:31:40 +0000 (15:31 +0200)]
[gcc] Disable long double for IA32. Disable i387 for x86-64.

Rationale: PNaCl can not offer 'long double' since this mode is only supported
by x86 architecture. To make further transition easier we'l disable long double
in default NaCl compiler. Unfortunatelly we can not disable i387 mode for IA32
because SSE is not enough to implement double precision floating point
operations and SSE2 is not implemented in Pentium !!! and Athlon XP (still
widely used in some regions). i387 mode can only ever use 80bit floats
internally - so while we are removing 80bit 'long double' type we are keeping
80bit internal XFmode around.

Also we are disabling SSE math for IA32 - this is not a good default mode for
general code: because SSE only supports single-precision float operations,
double-precision doubles can only be operated with i387 code and switch between
i387 and SSE subsystems is slow on a lot of CPUs. The SSE-base code still can be
used for carefully written codecs and benchmarks, but it's not a default
anymore, it must be enabled explicitly.

3 years ago[gcc] initial gcc bulk
Egor Pasko [Tue, 18 May 2010 13:30:14 +0000 (15:30 +0200)]
[gcc] initial gcc bulk

3 years ago[gdb] compilation fixes for gcc 4.4.1
Egor Pasko [Tue, 18 May 2010 13:29:20 +0000 (15:29 +0200)]
[gdb] compilation fixes for gcc 4.4.1

3 years ago[gdb] Initial NaCl gdb bulk
Egor Pasko [Mon, 24 May 2010 14:02:11 +0000 (16:02 +0200)]
[gdb] Initial NaCl gdb bulk

3 years ago[newlib] NaCl newlib bulk
Egor Pasko [Tue, 18 May 2010 13:28:02 +0000 (15:28 +0200)]
[newlib] NaCl newlib bulk

3 years ago[binutils] NaCl binutils bulk
Egor Pasko [Tue, 18 May 2010 13:26:49 +0000 (15:26 +0200)]
[binutils] NaCl binutils bulk

3 years ago[binutils] Bump binutils to 2.20.1 binutils-2.20.1
Victor Khimenko [Sat, 31 Jul 2010 21:18:15 +0000 (01:18 +0400)]
[binutils] Bump binutils to 2.20.1

Review URL: http://codereview.chromium.org/3018030

3 years ago[noupstream] Removed some files regenerated during the build
Egor Pasko [Tue, 1 Jun 2010 12:37:37 +0000 (14:37 +0200)]
[noupstream] Removed some files regenerated during the build

3 years ago[gcc] Added objc frontend and runtime
Evgeny Eltsin [Mon, 22 Nov 2010 17:09:46 +0000 (20:09 +0300)]
[gcc] Added objc frontend and runtime

3 years agoInitial commit of toolchain sources binutils-2.20 gcc-4.4.3 gdb-6.8 newlib-1.18.0
Egor Pasko [Tue, 18 May 2010 12:26:51 +0000 (14:26 +0200)]
Initial commit of toolchain sources

  binutils-2.20
  gcc-4.4.3
  gdb-6.8
  newlib-1.18.0