Commit graph

24952 commits

Author SHA1 Message Date
Yi Kong
43ccab85ff Fix complex number printing rules
Prettifies the complex number debug printing and workaround Clang's
implicit complex to real casting bug.

Bug: 71638783
Test: mma
Change-Id: I0482044ade136fa4cc44aaa0bb515061b40e1f76
2018-01-05 16:26:38 -08:00
Elliott Hughes
558a4f5923 Merge "Simplify atoi*/strto* for signed integers." 2017-12-22 17:48:31 +00:00
Elliott Hughes
cb239bda65 Simplify atoi*/strto* for signed integers.
Make the cost of strto<signed> closer to the cost of strto<unsigned>
by removing an `if` from the inner loop. Previously a signed conversion
cost 10ns more than an unsigned one.

After:

  BM_inttypes_strtoimax         81 ns         81 ns    8603362
  BM_inttypes_strtoumax         78 ns         78 ns    8967174
  BM_stdlib_strtol              81 ns         81 ns    8685537
  BM_stdlib_strtoll             81 ns         81 ns    8685481
  BM_stdlib_strtoul             78 ns         78 ns    8962569
  BM_stdlib_strtoull            78 ns         78 ns    8972023

Bug: N/A
Test: ran tests, benchmarks
Change-Id: I72dd5499427b6a940bd94c4d6f727f7efe134d7e
2017-12-21 17:44:22 -08:00
Elliott Hughes
f23ccdba77 Merge "Speed up __sfileext initialization." 2017-12-21 15:59:21 +00:00
Treehugger Robot
8039c49680 Merge "EndsWith now accepts std::string suffixes." 2017-12-21 02:34:35 +00:00
Treehugger Robot
2c5f914584 Merge "bionic: test: time()" 2017-12-20 23:57:36 +00:00
Mark Salyzyn
0b846e8c66 bionic: test: time()
Validate return values from time(), confirm progression.

Test: bionic-unit-tests --gtest_filter=time.time
Bug: 63737556
Change-Id: I08186780c42ded9648b3e788bb2caa2210d00dab
2017-12-20 12:36:57 -08:00
Elliott Hughes
6db9af0392 EndsWith now accepts std::string suffixes.
Bug: N/A
Test: ran tests
Change-Id: I947a94f1ef950452fb3f90b31448d915a12eb2ac
2017-12-20 12:28:30 -08:00
Elliott Hughes
1a56a26f11 Speed up __sfileext initialization.
The internal uses don't need to actually initialize a mutex since they'll
never escape and don't need locking. It's a small saving, but easy.

Before:

  BM_stdio_scanf_d                    465 ns        465 ns    1507891
  BM_stdio_scanf_maps                1836 ns       1836 ns     381082
  BM_stdio_scanf_maps_baseline        846 ns        845 ns     830881
  BM_stdio_scanf_s                    419 ns        419 ns    1671979

After:

  BM_stdio_scanf_d                    434 ns        434 ns    1612930
  BM_stdio_scanf_maps                1815 ns       1815 ns     386470
  BM_stdio_scanf_maps_baseline        875 ns        873 ns     803304
  BM_stdio_scanf_s                    382 ns        382 ns    1833198

Bug: http://b/70862888
Test: ran tests, benchmarks
Change-Id: Ic8822aaca5d8ca1a73390089153d0fe35d91673e
2017-12-20 08:53:49 -08:00
Elliott Hughes
777d7c7914 Merge "Use inline ctype functions for ato*/strto* and scanf." 2017-12-20 16:32:20 +00:00
Treehugger Robot
28f768d4e7 Merge "Use std::to_string instead of std::stringstream." 2017-12-20 02:24:19 +00:00
Elliott Hughes
1133fecde3 Use inline ctype functions for ato*/strto* and scanf.
This also let us remove the `unsigned char` casts, since we define our
inlines to work for all values.

Before:

  Benchmark                      Time           CPU Iterations
  -------------------------------------------------------------
  BM_inttypes_strtoimax        112 ns        112 ns    6222193
  BM_inttypes_strtoumax        104 ns        104 ns    6725010
  BM_stdlib_strtol             113 ns        113 ns    6195861
  BM_stdlib_strtoll            113 ns        113 ns    6195633
  BM_stdlib_strtoul            105 ns        105 ns    6691394
  BM_stdlib_strtoull           105 ns        105 ns    6690695

  BM_stdio_scanf_d                    504 ns        503 ns    1385224
  BM_stdio_scanf_maps                1900 ns       1898 ns     369260
  BM_stdio_scanf_maps_baseline       1030 ns       1030 ns     678832
  BM_stdio_scanf_s                    433 ns        432 ns    1619086

After:

  BM_inttypes_strtoimax         91 ns         91 ns    7718194
  BM_inttypes_strtoumax         82 ns         82 ns    8508052
  BM_stdlib_strtol              92 ns         92 ns    7674694
  BM_stdlib_strtoll             91 ns         91 ns    7639228
  BM_stdlib_strtoul             83 ns         82 ns    8500304
  BM_stdlib_strtoull            82 ns         82 ns    8504929

  BM_stdio_scanf_d                    465 ns        465 ns    1507891
  BM_stdio_scanf_maps                1836 ns       1836 ns     381082
  BM_stdio_scanf_maps_baseline        846 ns        845 ns     830881
  BM_stdio_scanf_s                    419 ns        419 ns    1671979

Bug: N/A
Test: ran tests, benchmarks
Change-Id: I44681daf16c4328b060770cf11fc0633157c427f
2017-12-19 16:37:01 -08:00
Elliott Hughes
f61a06e598 Use std::to_string instead of std::stringstream.
Bug: N/A
Test: ran tests
Change-Id: Ifeb7cf9517bcc05459e7ce316eb7604042510935
2017-12-19 16:11:37 -08:00
Elliott Hughes
9dc37b9439 Merge "Refactor the ato* and strto* family." 2017-12-20 00:05:57 +00:00
Elliott Hughes
1921dce886 Refactor the ato* and strto* family.
There are no meaningful changes here, just a minimal conversion to two
C++ templates to make further changes easier.

Bug: N/A
Test: ran tests, benchmarks
Change-Id: I958fbf17a85f19dd8f17bfb4bbb9314d220daa3b
2017-12-19 13:55:54 -08:00
Elliott Hughes
811a1dd868 Merge "More benchmarks." 2017-12-19 20:23:39 +00:00
Elliott Hughes
7063a838be More benchmarks.
Add a hand-rolled maps line parser as something to compare our realistic
sscanf benchmark against. Also add benchmarks for the ato*/strto* family.

This patch doesn't fix the tests, which seem to have been broken by
the recent google-benchmark upgrade despite the benchmarks themselves
all working just fine. To me that's a final strike against these tests
which are hard to maintain and not obviously useful, but we can worry
about what to do with them -- whether to just delete them or to try to
turn them into tests that actually have some value -- in a separate CL.

Bug: N/A
Test: ran benchmarks
Change-Id: I6c9a77ece98d624baeb049b360876ef5c35ea7f2
2017-12-19 08:55:40 -08:00
Tom Cherry
ba69b37a75 Merge "Split properties into their own class to make testing better" 2017-12-19 16:25:36 +00:00
Tom Cherry
e275d6d72d Split properties into their own class to make testing better
Reinitializing system properties can result in crashes later in the
program, and is generally not recommended or even supported.  This
change moves the actual logic for system properties into a class that
can be tested in isolation, without reinitializing the actual system
property area used in libc.

Bug: 62197783
Test: boot devices, ensure properties work
Test: system property unit tests and benchmarks
Change-Id: I9ae6e1b56c62f51a4d3fdb5b62b8926cef545649
2017-12-18 15:17:55 -08:00
Tom Cherry
721a5305e2 Merge "Revert "Don't use serialized propertyinfo"" 2017-12-18 22:02:35 +00:00
Treehugger Robot
580c2cd5d3 Merge "Fix types of POSIX struct fields for MIPS[64]" 2017-12-18 19:43:47 +00:00
Goran Jakovljevic
cd91a16c05 Fix types of POSIX struct fields for MIPS[64]
Tets: success on mma libbionic_tests_headers_posix
Change-Id: I7721634ee51801bc33877adf723ebd06491b344c
2017-12-18 11:09:37 +01:00
Elliott Hughes
5e77d57c48 Merge "POSIX says sigaction::sa_flags is int." 2017-12-16 00:02:53 +00:00
Elliott Hughes
9ffa4ae47b Merge "A few more trivial tests." 2017-12-15 23:43:42 +00:00
Elliott Hughes
a7f12944d4 A few more trivial tests.
Based on gaps in the list of functions not referenced by the test
executable.

Bug: N/A
Test: ran tests
Change-Id: I73c238e7cf360f94670c7cd13eb954341c940b7b
2017-12-15 13:55:53 -08:00
Treehugger Robot
b9d5a87b1b Merge "Use treble_linker_namespace instead of treble." 2017-12-15 17:41:27 +00:00
Elliott Hughes
a40640d418 POSIX says sigaction::sa_flags is int.
Bug: N/A
Test: builds
Change-Id: I8f682a6a075b0c27917d79414f013f928c75394d
2017-12-15 08:44:58 -08:00
Elliott Hughes
59a6ee963f Merge "Add trivial termios tests." 2017-12-15 01:32:03 +00:00
Elliott Hughes
6651b3d2e6 Merge "Mention the POSIX header tests in docs/status.md." 2017-12-15 00:11:03 +00:00
Elliott Hughes
45d99c06be Merge "Use in_addr in ip_mreq_source and ip_msfilter." 2017-12-14 20:40:39 +00:00
Elliott Hughes
64f355ffbd Use in_addr in ip_mreq_source and ip_msfilter.
This adds a new mechanism to say "replace struct S with #include <bits/S.h>".

Also switch epoll_event over to the new mechanism.

Also use the kernel's struct sockaddr_storage directly rather than behind
an unnecessary #define.

This patch also removes some dead code in the header scrubber. This code
still needs rewriting completely. I learned that a "block" isn't necessarily
a single struct definition, say; it might be a run of them. It seems like
a block is a run of preprocessor directives or a run of regular code.

Bug: https://issuetracker.google.com/36987220
Test: new test
Change-Id: Ic6a5c09559766a4babe3cd4c3ea538b885e07308
2017-12-14 10:07:27 -08:00
Elliott Hughes
5da96467a9 Add trivial termios tests.
...and fix the bugs.

Also explain why we can't support separate input and output speeds
without an ABI change. Luckily no-one is likely to need that anyway,
and they can always work around it by using `struct termios2` directly
themselves.

Bug: http://b/69816452
Test: ran tests
Change-Id: Ie08499a198bb6a20d7e5e2f5ff74a60bd53e97e1
2017-12-14 09:46:50 -08:00
Tom Cherry
8be995b6ac Revert "Don't use serialized propertyinfo"
This reverts commit e149f3c1d7.

Reason for revert: This is ready to be enabled now.

Bug: 36001741

Change-Id: I418d3a498ff0712ce9a1857924c6d0039026a664
2017-12-14 01:58:49 +00:00
Elliott Hughes
246617d5eb Merge "Explicitly disable the Mac build." 2017-12-14 00:10:12 +00:00
Elliott Hughes
79b13b9e0e Explicitly disable the Mac build.
Bug: N/A
Test: N/A
Change-Id: Ib188cf9ada5b4e801d6f1c7e58a9a474f96a16f0
2017-12-13 16:08:38 -08:00
Elliott Hughes
2237b6b8ec Mention the POSIX header tests in docs/status.md.
Also add a couple of comments in the tests for ease of understanding
when grepping for `__BIONIC__`.

Bug: N/A
Test: N/A
Change-Id: I7833a3ffbcc3badf9cec95f268d11a6d8a5ff9aa
2017-12-13 15:25:55 -08:00
Treehugger Robot
3ba327198a Merge "Test POSIX 1003.1 2016 chapter 13 "Headers"." 2017-12-13 22:42:23 +00:00
Treehugger Robot
4f04136676 Merge "versioner: remove parsing of platforms." 2017-12-13 22:27:18 +00:00
Steven Moreland
96bbc5ca87 Use treble_linker_namespace instead of treble.
More specific. Treble is being removed.

Bug: 62019611
Test: manual
Change-Id: I94c21c6a5cb6a258bfb36a0b7da23abdc73a67fb
2017-12-13 14:11:26 -08:00
Robert Greenwalt
4ca6b87847 Merge "Don't use serialized propertyinfo" 2017-12-13 21:40:47 +00:00
Treehugger Robot
894e6f12ad Merge "Include what we use." 2017-12-13 21:32:49 +00:00
Elliott Hughes
21b56ebbd4 Test POSIX 1003.1 2016 chapter 13 "Headers".
And fix one thing that this found: apparently <stdlib.h> should also
make the various *WAIT* macros available.

Bug: N/A
Test: builds
Change-Id: Id879bf3c1bddd1170261a809e7280150a74d6b3d
2017-12-13 09:01:35 -08:00
Elliott Hughes
af36229250 Merge "More scanf cleanup." 2017-12-13 16:21:48 +00:00
Tom Cherry
e149f3c1d7 Don't use serialized propertyinfo
This needs more work before it can be enabled.

Bug: 36001741
Test: boot, check that we're using old style properties
Change-Id: I7032f4b4224758b187cf4e8a53fd8845466a5d4a
2017-12-13 02:48:23 -08:00
Tom Cherry
e6e8f6ee77 Merge "Add support for serialized property contexts" 2017-12-13 01:28:29 +00:00
Elliott Hughes
bf9cb9e404 More scanf cleanup.
Merge CT_CCL and CT_STRING handling before we add %m.

Also fix an accidental scanf/wscanf difference.

Add currently-disabled tests for questionable behavior noticed during
code review that isn't a regression, but should be fixed later.

Bug: http://b/68672236
Bug: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=202240
Test: ran tests
Change-Id: I3eec9b7dfce84f63c68426406224822c52551d64
2017-12-12 17:10:51 -08:00
Dan Albert
3429c090f5 Include what we use.
Test: mma
Bug: None
Change-Id: I259468e829052bf27fab599ff951a5a2638d35aa
Exempt-From-Owner-Approval: trivial cleanup
2017-12-12 15:43:09 -08:00
Josh Gao
c166113c2b versioner: remove parsing of platforms.
Leave the machinery to use a symbol database around so that we can
switch over to parsing libc.map.txt in the future.

Test: tools/versioner/run_tests.py
Change-Id: Ifa8899b698764e4aeb6aa8bb2cdb2d44a67b863f
2017-12-12 12:01:22 -08:00
Tom Cherry
79b724ca5a Add support for serialized property contexts
This adds support for reading a serialized
/dev/__properties__/property_info file, which contains a
serialized trie that maps property names to the SELinux context to
which they belong.

Performance wise on walleye, this change reduces the start up cost in
libc from ~3000us to ~430us.  On a benchmark that calls
__system_property_find() for each property set on the system, it
reduces the time per iteration from ~650us to ~292us.

Bug: 36001741
Test: Boot bullhead, walleye, run unit tests
Test: Benchmark initialization and lookup performance

Change-Id: I0887a3a7da88eb51b6d1bd494fa5bce593423599
2017-12-12 00:36:20 -08:00
Elliott Hughes
eb7347aedb Merge "Trivial scanf benchmarks." 2017-12-12 00:29:22 +00:00