== Progress ==
- PR66726 (2/10)
* Testing a patch
- PR63586 (2/10)
* Posted a patch
* Revised the patch based on testing
- LuaJIT (2/10)
* Setup nginx
* Still haven't figured out how to use mongodb with nginx (config
required).
- Misc (2/10)
* gcc/bug list
* LTO
- sick (2/10)
== Plan ==
* bug reports
* LTO
Hi,
when working with the Linaro patches I found that a particular commit
breaks our aarch64 kernel build.
The patch in question is that one:
commit be09330da9d0777c4a58568d137e3f8a3dbe0a0b
Author: Yvan Roux <yvan.roux(a)linaro.org>
Date: Tue Oct 27 21:18:19 2015 +0100
One of the things it attempts to change apparently is moving the .arch
specifiers in the assembler file from a global scope to individual
functions. What also happens though is that they seem to lose some
information after that transformation.
I observed that when building arch/arm64/crypto/aes-ce-cipher.c from
the Linux kernel. This code contains inline assembly like this:
static void aes_cipher_decrypt(struct crypto_tfm *tfm, u8 dst[], u8 const src[])
{
struct crypto_aes_ctx *ctx = crypto_tfm_ctx(tfm);
struct aes_block *out = (struct aes_block *)dst;
struct aes_block const *in = (struct aes_block *)src;
void *dummy0;
int dummy1;
kernel_neon_begin_partial(4);
__asm__(" ld1 {v0.16b}, %[in] ;"
" ld1 {v1.2d}, [%[key]], #16 ;"
" cmp %w[rounds], #10 ;"
" bmi 0f ;"
" bne 3f ;"
" mov v3.16b, v1.16b ;"
" b 2f ;"
"0: mov v2.16b, v1.16b ;"
" ld1 {v3.2d}, [%[key]], #16 ;"
"1: aesd v0.16b, v2.16b ;"
" aesimc v0.16b, v0.16b ;"
"2: ld1 {v1.2d}, [%[key]], #16 ;"
" aesd v0.16b, v3.16b ;"
" aesimc v0.16b, v0.16b ;"
"3: ld1 {v2.2d}, [%[key]], #16 ;"
" subs %w[rounds], %w[rounds], #3 ;"
" aesd v0.16b, v1.16b ;"
" aesimc v0.16b, v0.16b ;"
" ld1 {v3.2d}, [%[key]], #16 ;"
" bpl 1b ;"
" aesd v0.16b, v2.16b ;"
" eor v0.16b, v0.16b, v3.16b ;"
" st1 {v0.16b}, %[out] ;"
: [out] "=Q"(*out),
[key] "=r"(dummy0),
[rounds] "=r"(dummy1)
: [in] "Q"(*in),
"1"(ctx->key_dec),
"2"(num_rounds(ctx) - 2)
: "cc");
kernel_neon_end();
}
Now without this patch the compiler behaved like the following. It was
invoked with:
aarch64-linux-gnu-gcc -Wp,-MD,arch/arm64/crypto/.aes-ce-cipher.o.d
-nostdinc -isystem
/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/bin/../lib/gcc/aarch64-linux-gnu/5.2.1/include
-I/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/src/linux/arch/arm64/include
-Iarch/arm64/include/generated/uapi -Iarch/arm64/include/generated
-I/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/src/linux/include
-Iinclude -I/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/src/linux/arch/arm64/include/uapi
-Iarch/arm64/include/generated/uapi
-I/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/src/linux/include/uapi
-Iinclude/generated/uapi -include
/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/src/linux/include/linux/kconfig.h
-I/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/src/linux/arch/arm64/crypto
-Iarch/arm64/crypto -D__KERNEL__ -mlittle-endian -Wall -Wundef
-Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
-Werror-implicit-function-declaration -Wno-format-security -std=gnu89
-mgeneral-regs-only -fno-delete-null-pointer-checks -O2
--param=allow-store-data-races=0 -Wframe-larger-than=2048
-fno-stack-protector -Wno-unused-but-set-variable
-fno-omit-frame-pointer -fno-optimize-sibling-calls
-fno-var-tracking-assignments -g -Wdeclaration-after-statement
-Wno-pointer-sign -fno-strict-overflow -fconserve-stack
-Werror=implicit-int -Werror=strict-prototypes -Werror=date-time
-DCC_HAVE_ASM_GOTO -Werror -march=armv8-a+crypto
-D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(aes_ce_cipher)"
-D"KBUILD_MODNAME=KBUILD_STR(aes_ce_cipher)" -c -o
arch/arm64/crypto/aes-ce-cipher.o
/var/fpwork/rschiele/crossbuild/builds/aarch64-linux-gnu/linux-next/srcdir/src/linux/arch/arm64/crypto/aes-ce-cipher.c
As a result it created a file for the assembler with the global
.arch armv8-a+fp+simd+crypto
at the beginning of the file.
After the patch it created individual
.arch armv8-a
at individual places.
It is not clear to me, why the extensions (fp+simd+crypto) got lost.
Is that intended, such that the code needs special adaption for inline
assembly using those extensions or is that loss of extensions a bug of
that patch?
Greetings!
Robert
== Progress ==
o Linaro GCC (6/10)
* More backports
* Compared our various flavor of validation results
* Looked at bug reports and mailing list questions on our last snapshot.
o Upstream work (2/10)
* Continue on sanitizing gfortran testsuite
o Misc (2/10)
* Various meetings
* Discussed benchmarking infra with Bernie
== Plan ==
o GCC 5.3 branch merge
o Continue on-going tasks
o Tuesday Off
Holiday [2/10]
Port to microinstance - TCWG-432 [1/10]
* Set up reporting for CPU2006
* Learned how to generate metadata, but not how to use it
Trigger benchmarks on backports - TCWG-352 [2/10]
* Figured out the rough shape
* Created, didn't test, rough implementation
TCWG-354 [3/10]
* Build/run scaffolding for CoreMark Pro
* Working for manual runs
Misc [2/10]
* Input validation for dispatcher script
* Meeting with Ade on LAVA benchmarking
* Meetings/mail/etc
=Plan=
Review, test, debug build-triggers-benchmark job
Check CoreMark Pro run configuration, enable for automatic runs
Review security with shared uinstance/main instance code
Expose more data, benchmarks to bundles
Debug/test Jenkins job in microinstance
Create bootable image for at least 1 target, or know what the problems are
Write up noise control report (if time)
More support for SPEC-on-Android?
* TCWG-72 (2/10)
- Added new target hook to generate target-specific divmod libfunc
- Builds cleanly now on x86_64, arm and arm-linux-gnueabihf
- Sent to tcwg list for review
* LTO spec2k6 build (2/10)
- Built speck26 with LTO
* Target hook (4/10)
- Completed with ASM_OUTPUT_LABEL_REF
- In progress - SIZE_ASM_OP to data hook, ASM_OUTPUT_SIZE_DIRECTIVE,
ASM_OUTPUT_MEASURED_SIZE
* Benchmarking (1/10)
- tcwg-319: Job in progress for fp benchmarks with patch
- tcwg-310 (loop peeling): Submitted job for running 252.eon
- Both the jobs failed due to lab downtime, need to be re-run.
- Received job template from Bernie for running benchmarks on cortex-a15.
* Misc (1/10)
- Meetings
== Next Week ==
- Continue benchmarking spec2k6 with LTO
- Look at bugs exposed by speck2k6 LTO build
- Benchmarking tcwg-319, tcwg-310
== This week ==
* TCWG-317 - Exploit wide add operations when appropriate for Aarch32 (0/10)
- No comments/review upstream will ping for update
* TCWG-316 - Exploit vector multiply by scalar instructions (4/10)
- Code improvements will require standard name for vectorizer and new
patterns
- On hold until GCC 6 is released
* Bugzilla 68543 - [AArch64] Implement overflow arithmetic standard
names (3/10)
- Initial investigation
* Bugzilla 68532 - [ARM] Incorrect code result on arm big endian (2/10)
- Investigation into understanding how vectorizer represents lanes vs
arm big endian back end
- Solution suspended until I can coordinate with Charlie
* Misc (1/10)
- Conference calls
== Next week ==
* Bugzilla 68543 - Implement add and subtract overflow operations and test
* TCWG-317 - Ping upstream and respond to upstream feedback
* Bugzilla 68532 - Coordinate with Charlie
== Progress ==
* Ill (4/10)
* Support (1/10)
- Bugzilla issues (PR20490, PR24635, PR24350, PR20025, PR25720, PR25722)
* Benchmarks (1/10)
- Checking some previous benchmark results on A57
* Buildbots (2/10)
- Getting AArch64 full bot back to rotation, since it's stable now
- Re-enabling libc++ prototypes on local master
- Bisecting broken test-suite
- Another power cut in the office sent all the bots down... :(
* Background (2/10)
- Code review, meetings, discussions, general support, etc.
- Validating some old sanitizer bugs
- FOSDEM admin
* One day off on Monday.
# Progress #
* Answer ST questions about supporting multi-arch with ST jtag probe.
[1/10]
* TCWG-171, Enable gdb core file tests when testing remotely, [3/10].
Ongoing.
* Run gdb.base/sizeof.exp with board having gdb,noinferiorio. Done.
[1/10]
* TCWG-460, mutli-arch follow-up work, teach AArch64 GDBserver
understand ARM breakpoint instructions. Patch is approved. [2/10].
* TCWG-424, fail in gdb.base/random-signal.exp. [1/10] Root cause is
identified, need to figure out how to fix it in next step.
* Review ARM GDBserver software single step patch V4.
# Plan #
* TCWG-171, TCWG-156, TCWG-424.
* Review ARM GDBserver software single step patch V5, which should be
the final version, I hope.
--
Yao
== Progress ==
* Validation
- a few cleanup patches in the comparison scripts
- contribute to debug of ptys allocation problems:
the tests pass when executed outside of our schroots.
- improvements in the reports from the validation
done in the ST Compute Farm
- reported a few regressions
* GCC
- cleanup patch for target attributes tests,
- pr68620 (fp16 transfers in big-endian mode)
* Misc (conf calls, meetings, emails, ....)
== Next ==
* Validation: monitoring, improvements
* GCC: bug fixes, cleanup
Hi Linaro Toolchian Group,
I am new to GCC development and have some basic question on its development
process.
Could you please give some insight on below questions. (Apology if they are
very trivial).
I have read https://gcc.gnu.org/develop.html
If I am correct, gcc trunk is on gcc 6.0.0 (stage 3) at present and will
becomes 6.0.1 (regression fix only) in January 2016.
gcc 6.0.1 will be released as gcc 6.1.0 in April, 2016 and from there
onwards gcc 6 release branch will start.
However, There is also a gcc 5 branch in parallel whose current version is
5.2.1 and will be released as gcc 5.3 soon.
Hopefully gcc 5.3 would be the last release in gcc 5 series. (Please
correct me if I am wrong).
[Questions]
1. What is the difference between experimental(gcc 6.0.0 stage 3) & gcc
release branch (gcc 5.2.1)?
Is there any rule which decides which changes will go where?
In case, I have some patches for new aarch64 processor at present, in
which branch these changes would be merged (assuming they passes reviews)?
2. How is the subversion of release branches are decided? Is it correct to
say that there will be always 3 subversion of any release branch (e.g. gcc
5.1, gcc 5.2 & gcc 5.3)?
3. What is the working model between GNU GCC and Linaro GCC? Does Linaro
directly accept patches? or they need to go to GNU GCC first?
Thanks in advance for your time.
with regards,
Virendra Kumar Pathak
--
with regards,
Virendra Kumar Pathak