Commit Graph

718 Commits

Author SHA1 Message Date
Ian Kasprzak 897444209c Merge "Revert "Fixed a typo in the version name"" 2020-03-06 21:57:57 +00:00
Ian Kasprzak e6e87fd705 Revert "Fixed a typo in the version name"
This reverts commit eb94c7802d.

Reason for revert: b/150949964 - Broke boot test on aosp-master-with-phones.

Merged-In tags to revert just aosp-master/stage-aosp-master where boot
is broken.

Change-Id: Ic76e36b42060b5948f48af41f67544598d6f9f87
Merged-In: I0e1e7da1cfbe320ba6605f8de9dcdb5091c41e4f
Merged-In: Icff3bd68b31f8c1d5a71f05c7c52eae6e896bfc2
2020-03-06 19:38:13 +00:00
Jiyong Park fd4e66221a Merge "Fixed a typo in the version name" 2020-03-06 00:53:07 +00:00
Luca Stefani dfdbae0e11 liblog: Fix bugprone-macro-parentheses warnings
Change-Id: I91ab6d578e459b351468c0b6fc4b76b5f53d2441
2020-03-05 12:01:32 +01:00
Jiyong Park eb94c7802d Fixed a typo in the version name
Bug: 149569129
Test: m
Merged-In: I7401e8c092d4ee329fb1b5f23b7797f706b58faa
(cherry picked from commit 3d79b37a41)
Change-Id: I7401e8c092d4ee329fb1b5f23b7797f706b58faa
2020-03-04 12:03:04 +09:00
Tom Cherry cfcf684c83 Revert "liblog: disable header_abi_checker"
All planned changes to liblog have been made, so it's time to
re-enable this.

This reverts commit 896fb9e57a.

Test: build
2020-02-26 13:43:31 -08:00
Tom Cherry 662b4691b1 liblog: add benchmark tests for not-printed message
Add a BM_log_verbose_overhead test that measure the overhead of
writing a log message that will not be printed due to verbosity
levels.  This was optimized in R to not format the log messages before
checking if they will be logged.

Results with R:
BM_log_verbose_overhead_null_mean          159 ns     159 ns    100
BM_log_verbose_overhead_null_median        159 ns     159 ns    100
BM_log_verbose_overhead_null_stddev        0.568 ns   0.464 ns  100
Results with Q:
M_log_verbose_overhead_null_mean           601 ns     600 ns    100
BM_log_verbose_overhead_null_median        601 ns     600 ns    100
BM_log_verbose_overhead_null_stddev        2.40 ns    2.23 ns   100

This benchmark shows liblog's overhead when not printing a log message
to be nearly ~4x faster than with Q.

Test: run this benchmark
Change-Id: I09a60e61bf064330bf15a9d0a946acf16e777a6d
2020-02-21 16:38:31 -08:00
Tom Cherry 3574c37f98 liblog: add __attribute__((uninitialized)) to liblog buffers
These buffers are immediately written into with *printf() and are in
the hot path, so do not initialize them.  This saves ~70ns off of each
log message, which is ~14% of the overhead within
__android_log_print() when writing to a no-op logger.

Test: liblog benchmarks
Change-Id: I2b898e72c75b57bc63fee565b49a4e00e377ed1a
2020-02-21 16:37:43 -08:00
Rubin Xu 7a5cbfc645 Rename ro.device_owner system property
This is renamed to ro.organization_owned to cover the extended
usage now that there is a new management mode for fully-managed
organization owned devices: organization-owned managed profile.
A device is considered fully-managed if there is a device owner
or an organization-owned managed profile.

Test: atest liblog-unit-tests
Test: atest propertyinfoserializer_tests
Bug: 148437300
Change-Id: Iaa8ea246c973732526abc1da5b307af8bce1a0af
2020-02-19 10:34:36 +00:00
Anders Frostad Pedersen c54b30e106 Specify argument types for function prototype
__android_log_get_minimum_priority caused build failures
when used in combination with strict prototypes compiler flags.

Fix this by specifying void argument.

Bug: 116329414
Bug: 119867234
Change-Id: Icbb8f66a5e35f02b57d772f5acdb9de8638d252c
Test: Manual
2020-02-18 20:25:54 +00:00
Jeffrey Huang 66f58a3ecc Add apex available to liblog
Bug: 145923087
Test: m -j
Change-Id: I3ac890cbc71ad062ff095adfa2272f6f76db466b
2020-02-13 12:46:09 -08:00
Tom Cherry d44a5f840d liblog: null terminate log_msg
Also, use LOGGER_ENTRY_MAX_LEN instead of sizeof(log_msg) for ensuring
that the read did not overflow, since sizeof(log_msg) is one byte
longer to allow for placing a null terminator already.

Bug: 148966104
Test: liblog unit tests
Change-Id: Id4fe8aa5da44e9d62f59b6541f157a4e7b038d07
2020-02-05 15:04:32 -08:00
Chih-hung Hsieh e2a1705f1f Merge "Allow LOG_ALWAYS_FATAL_IF in constexpr functions" 2020-01-31 18:15:06 +00:00
Chih-Hung Hsieh 9911e28043 Allow LOG_ALWAYS_FATAL_IF in constexpr functions
* When __FAKE_USE_VA_ARGS has args that are not constexpr,
  reaching it in a constexpr function will be make the
  constexpr function invalid.
  To allow LOG_ALWAYS_FATAL_IF in a constexpr functions when
  the tested condition is false, it should call __FAKE_USE_VA_ARGS
  only when the tested condition is true.
* Other ALOG*_IF macros are also changed to call
  __FAKE_USE_VA_ARGS only when the tested condition is true.

Bug: 148548418
Test: WITH_TIDY=1 make
Change-Id: Ie8a444dffbf9cbef78e5e0b49b44f4092bcf9982
2020-01-30 09:39:50 -08:00
Tom Cherry 5676f3d916 liblog: fix host tests
1) Fix up the host tests for new logging format
2) Add recently added tests to the host test
3) Ensure that properties are cleaned up by liblog-unit-tests

Test: unit tests
Change-Id: I303549aecc26d11ec87e59d48758ced4c198b72c
2020-01-28 13:07:11 -08:00
Tom Cherry f48f685e60 liblog: do not allow loggers to write to binary buffers
Do not write to binary buffers, this was already done for logd,
but wasn't explicitly done for other loggers, so do that too.

Test: unit tests
Change-Id: Ia36e0d2e1b6c833780239a5ef459abea99bc4a1f
2020-01-28 13:07:11 -08:00
Tom Cherry e2187bfbbc liblog: remove fake_log_device
This is now dead code as __android_log_stderr_logger() has superseded it.

Bug: 147496863
Test: build
Change-Id: Ibdea2961ec4fc093bf9e35581dc1c46db2cff06a
2020-01-28 10:42:02 -08:00
Tom Cherry ff464b1288 liblog: always restore errno in logging functions
Some recent changes can have these logging functions potentially set
errno.  This change places android::base::ErrnoRestorer at the entry
point of the public functions where we want to guarantee errno is
restored to ensure this will not happen again.

Test: build
Change-Id: Iab4170ab16b9c7301474a509ee42d38b370b91a4
2020-01-27 13:50:44 -08:00
Tom Cherry 2ec6a53a46 liblog: use default tag for loggability checks if no tag is provided
Bug: 116329414
Bug: 119867234
Test: new unit tests
Change-Id: I92a3f4f95e5f482f6fe20f17ed83c8ed367b06dc
2020-01-27 09:38:54 -08:00
Yifan Hong d66e442c21 Merge changes from topic "ramdisk"
* changes:
  Add e2fsck to fs_config
  Make ramdisk_available.
2020-01-24 22:39:35 +00:00
Tom Cherry 69ee5dde99 Move default tag from libbase to liblog
Bug: 119867234
Test: log tags look right, libbase/liblog unit tests
Change-Id: I3670c3fdce3d0238a23a53bba2877ffed1291f9c
2020-01-23 08:39:31 -08:00
Yifan Hong 7dd4553991 Make ramdisk_available.
Test: pass
Bug: 147347110
Change-Id: I9787e386e552393efc5beed5aac577be9ce1a3c5
2020-01-22 16:47:14 -08:00
Tom Cherry 96e7ef5ec1 liblog: check loggability before formatting
Only print logs with priority >= INFO on host, as fake_log_device
does.

This fixes a regression in host builds where loggability wasn't
checked at all.

Bug: 69935292
Test: ART host tests don't print extraneous logs
Change-Id: I885b794da6f24bd905192252925e4a9f88b06674
2020-01-22 08:49:59 -08:00
Tom Cherry 0391a879f7 Move minimum log priority from libbase to liblog
See the previous commit moving SetLogger and SetAborter to liblog for
motivation.

This creates more harmony between the two mechanisms in libbase and
liblog for checking loggability.
Currently:
1) libbase filters all messages based on its minimum log priority. For
   example, if minimum log priority in libbase remained at its
   default, but a tag was specifically opted into DEBUG logs via
   log.tag.<tag>, libbase would not print this log.
2) liblog ignores libbase's minimum log priority.  For example if a
   process called SetMinimumLogPriority(WARNING) but used a library
   that logged via liblog's ALOGI macro, that log would still be
   printed even though the process intends on filtering out those INFO
   messages.

With this change:
1) If both a minimum log priority and a priority through log.tag.<tag>
   are set, then the lower of the two values is used.
2) If only one or the other is set, then that value is used.  This
   fixes the two issues described above.
3) If neither of these values are set, then the default of using INFO
   is unchanged.

Bug: 116329414
Bug: 119867234
Test: libbase and liblog minimum log priority tests
Change-Id: Icb49b30b9d93bf797470e23730ae9e537931bb6c
2020-01-21 12:14:43 -08:00
Tom Cherry 349b0c43ad Move SetLogger and SetAborter from libbase to liblog
libbase is copied into each APEX module which requires it, meaning
that there may be multiple instances of libbase running within a
single process with their own copy of libbase's globals.  This means
that SetLogger() and SetAborter() will only impact logs from the
instance of libbase that calls it.  This change moves this state to
liblog, since it will only ever have one instance in a single
process.

One major side-effect here is that now both ALOGE style and LOG(...)
style logs will be handled through the same logger function.  For
example, a logger specified through libbase's SetLogger() will now see
logs sent to liblog through ALOGE().  This is intended behavior.

A second side-effect is that libbase's stderr logger is used for all
host logging now.  It's simply a better logging default than the
fake_log_device logger in liblog currently and makes ALOGE and
LOG(...) logs on host follow the same format.

Bug: 119867234
Test: libbase and liblog unit tests; logging works
Change-Id: Ib52cbfb4e43749e50910ed19a993dffae19ace86
2020-01-21 11:05:24 -08:00
Chong Zhang 265eee2006 Add version #29 and #30 to liblog
bug: 147759770
test: build
Change-Id: I38bcab9bc14088adbdbc3a92620f89a6fe397994
2020-01-16 11:11:44 -08:00
Tom Cherry 02ff976065 liblog: remove log_portability.h
__BEGIN_DECLS and __END_DECLS are all that are left, and I can compile
with using normal <sys/cdefs.h>, so hopefully we can remove this at
last.

Test: build
Change-Id: I6df7ef0da027bb91c98806e0f9661d7416ebaa5d
2020-01-14 09:56:30 -08:00
Tom Cherry 121292dd81 liblog: use libbase_headers for TEMP_FAILURE_RETRY
Test: build
Change-Id: Id3b57ff0327d4632e91960e5e70f3aa21992ed15
2020-01-14 09:56:25 -08:00
Tom Cherry b47aa2a592 liblog: remove more unused code
Cleanup the headers; we really don't want to encourage any more
cutils/list.h usage...

Remove __android_log_uid() since the only remaining users are built
for device, so they can just use getuid() directly.

Test: build
Change-Id: I62be2c1e43d83807deaa9342afcc72459947cf15
2020-01-08 17:11:09 -08:00
Tom Cherry 21bb36c66a liblog: remove the last of the transport structs
Test: build, liblog unit tests
Change-Id: I292662fc64e3163b570c5daeaa8f912fb6ca74e8
2020-01-08 17:11:06 -08:00
Bookatz 42a4ca6a45 CtsLiblogTestCases secondary_user
Marks this CTS test module as supporting secondary_user, meaning that
the tests are eligible to be run from a regular Android user other
than the system user (i.e. other than user 0).

Note that 'user' here refers to the concept of users in Android
Multiuser; it is NOT the same as a uid.

Bug: 141773058
Test: module passed with secondary_user params
 (--enable-optional-parameterization --module-parameter secondary_user)

Change-Id: Iaff9fb5d21473129ce3a802d179db474f7c763bc
2020-01-06 09:58:07 -08:00
Tom Cherry ee747e7dfa liblog: don't destroy global mutexes
Some objects may log when they're destructed, so don't destroy the
global std::mutex in fake_log_device.cpp.

Test: AAPT works with a log in VectorImpl::finish_vector()
Change-Id: Ie5a0ac9fc4e6a137e9516059a831e499d55d5ddb
2019-12-20 16:13:00 -08:00
Tom Cherry 06e0fced63 liblog: have writers handle their own state
Remove the transport available and open functions since the writers
are able to manage their own state.  Remove the initialization dance
with write_to_log, since it is unneeded once this is removed as well.

Remove the global lock around the close() functions as correct locking
has been added to the writers in a previous change.

Test: logging works, liblog-unit-tests
Change-Id: If7fa11e773763d0b5fcb2e696ad1c88ff4a4cfdf
2019-12-12 16:19:08 -08:00
Tom Cherry 2a6811b4d1 liblog: use a rwlock for writer initialization
The current system of using atomics isn't thread safe and may result
in doubly closing FDs or closing actively used FDs.  The safest way to
do this is to use a rwlock, which should not have a much higher
overhead than the atomics do, as a vast majority of the time, there
will not be writers.

This moves us further away from using the transport interface, which
will be removed.  Each writer should be self contained, without a
separate open or available function.

Also, keep the pmsg fd open if it is opened by
__android_log_pmsg_file_write().  This fd was closed due to issues
with zygote, but it looks like it is only called by recovery now, so
there is no reason to close this fd at the end of that function.

Test: logging works, liblog-unit-tests
Change-Id: I345c9a5d18c55b11a280c8362df854784abf46fd
2019-12-12 16:19:08 -08:00
Tom Cherry 49a8af7dff liblog: do not check loggability of event logs before sending to logd
This code was introduced to help performance by skipping sending these
messages to logd when logd would later drop them.  However it has
multiple flaws:

1) Event logs aren't super common and non-loggable event logs are even
   less common, so it would be a trivial benefit if any.
2) This code is not particularly safe as written, which is even
   acknowledged in the comments.
3) This forces processes that write event logs to allocate a rather
   sizable amount of memory.

Therefore, it's better to simply remove this and let logd drop these
messages when it receives them.

Bug: 139705697
Test: logging works, liblog-unit-tests
Change-Id: Ide01574112e173d4922137b3d3868cf8c2c09086
2019-12-11 15:46:47 -08:00
Tom Cherry c619e49f74 liblog: simplify fake_log_device
This still fakes the long removed /dev/log devices, whereas it only
needs to print to stderr, so simplify that code.

Use std::mutex now that it is C++ to easy portability concerns.

Use the proper liblog headers for formatting information instead of
hardcoding a copy.

Test: liblog-host unit test
Change-Id: I310a6e7ad939960300eafa729cbfc535c5ced445
2019-12-11 07:20:37 -08:00
Tom Cherry d953ba3c82 liblog: add a test for liblog on host
Test: this test
Change-Id: I60fa8b82dbc010395762eba70502b89b295e29f5
2019-12-10 15:35:19 -08:00
Tom Cherry ed860ff4bf Make android_logger_set_prune_list() sane
The current version requires callers to supply a string with 32 extra
bytes for liblog to internally prepend "setPruneList ", and to have
enough space to parse logd's return string.  That is an unacceptable
requirement on callers.

This change removes that requirement by having liblog allocate the
needed std::string in any case.

It also stops writing back the 'success' or 'Invalid' string to the
caller's buffer, since that is redundant as well.

Test: changing prune settings works.
Change-Id: Ic0f03a229f0b9a77d03adcb91288370c3bd42903
2019-12-06 11:23:58 -08:00
Tom Cherry 8d2225353c liblog: accept log messages with hdr_size greater than known headers
We don't need to be so strict about this comparison.  It's possible
that logd will extend the message that it passes to readers in the
future, and since we have a hdr_size parameter it can do so in a
backwards compatible way, as long as we loosen this restriction.

This keeps a sane upper bound that the hdr_size cannot be larger than
the log message itself.

Test: logcat, liblog-unit-tests
Change-Id: I8a6bea2a2d6e3315d998c51c1029e466ff06b45f
2019-12-04 15:28:03 -08:00
Tom Cherry 4023938914 Merge "liblog: remove the rest of the log reader transport" 2019-11-19 20:21:42 +00:00
Tom Cherry 332f99a7ed Merge "liblog: remove memset() before recv()." 2019-11-19 19:31:06 +00:00
Tom Cherry 1a75a8cd4b liblog: remove memset() before recv().
This is unneeded, since we're already checking the length returned by
recv() and log_msg that is read for validity.

It costs ~4% of CPU with `logcat -s` and ~2% of CPU when running
simpleperf for 1 second on walleye on master.

Bug: 144311420
Test: logcat works, simpleperf doesn't show memset() costing as much.
Change-Id: I986e7e96518774034340f1b1201a2071a904e3bb
2019-11-19 10:10:37 -08:00
Tom Cherry 026ddde6e4 liblog: remove the rest of the log reader transport
This is simplified down to the point there are only two branches that
need to be made, so remove the rest of the transport structs and
simply branch where needed.

Test: liblog-unit-tests
Change-Id: Ic82e7e70eb7b4e40b381a4d8066629c5b7d4f827
2019-11-19 09:41:49 -08:00
Greg Kaiser 9829e7f894 liblog: Assure shifting behavior is consistent
Shifting a signed 32-bit value by 31 bits is implementation-
defined behavior.  So we change to an unsigned value for our
shift by 31 bits, and go ahead and change the others to
unsigned for consistency.

Test: TreeHugger
Change-Id: Ib98f9b1e468d28dafd09e86273bf76beb1ea1fa5
2019-11-19 06:53:22 -08:00
Tom Cherry 7d16aedc47 Merge "liblog: simplify logd 'command' functions and struct logger" 2019-11-18 21:47:16 +00:00
Tom Cherry 9156c534e0 liblog: simplify logd 'command' functions and struct logger
There are a set of functions, such as android_logger_get_log_size()
and android_logger_get_prune_list() that talk to the logd command
socket to perform their activities.  There's a transport abstraction
layer that handles these symbols to optionally route them to other
transports, originally designed for pstore or local logger; however
these functions fundamentally only make sense for logd.

Ideally, these functions would be removed and new functions would be
added that do not depend on struct logger_list or struct logger and
more clearly indicate that they only work with logd.  For example:

android_logger_get_size(struct logger*) could be
logd_get_buffer_size(log_id_t log_id).  We would remove the need to
'open' the struct logger and make it clear that it only operates on
logd.

Since liblog is an llndk library however, we cannot change or remove
these symbols.  Since these symbols are not frequently used, it seems
acceptable to keep them as is and not introduce improved versions.
We, however, do want to simplify the code that handles them and this
change removes the transport abstraction layer that handles them.
They retain the behavior that unless the struct logger_list was opened
for logd, that the functions return -EINVAL.

The one exception to this is android_logger_clear().  If the struct
logger provided to this function was opened from a struct logger_list
that used pstore for its mode argument, this function will clear the
entire pstore log.  This function does not respect the 'logId'
parameter of the struct logger, since that would not be possible.

This change removes this android_logger_clear() behavior and makes it
strictly for logd, for symmetry with the rest of the functions and due
to the lack of clarity regarding the 'logId' parameter of its input.
The only caller of this function, logcat, will clear pstore directly.

struct logger was built to encapsulate the information needed to
connect to a logger device from the old kernel logger.  Now that we
only support reading from pstore and from logd, there is much less
information needed to be captured.  Specifically, we only need to know
the log_id and whether or not it was opened as part of a pstore or
logd 'list'.

Test: liblog-unit-test
Test: logcat -c/-g/-G/-p/-P/-S work
Test: logcat -c works with -L
Test: logcat -g/-G/-p/-P/-S continue to fail with -L
Change-Id: I2c549b6f8539de94510e223949ab209ecc40e2d0
2019-11-18 07:16:40 -08:00
Tom Cherry c9c8318db6 Merge "liblog: return 0 from android_logger_list_read() when recv() returns 0" 2019-11-18 14:37:54 +00:00
Tom Cherry b8bacea818 liblog: return 0 from android_logger_list_read() when recv() returns 0
We used to do this, but it got lost while refactoring this code.

Bug: 144311420
Test: we see "unexpected EOF!" instead of "unexpected length" from logcat
Change-Id: I7858d0a774a9eac63e5547ee67e85ef8fb0c682d
2019-11-15 16:48:01 -08:00
Tom Cherry 828db1a901 liblog: cleanup opaque type usage
There's a lot of unnecessary boilerplate around these opaque types,
and this change simplifies it.

Test: liblog-unit-tests
Change-Id: I0c4e133037fd5f04157ac22175181a6a496e18c4
2019-11-14 10:40:42 -08:00
Jiyong Park b2542d2942 Rename # vndk tag to # llndk
The APIs that are tagged with # vndk are actually for LLNDK libraries.
Although LLNDK is part of VNDK, calling those APIs 'vndk' has given
users a wrong perception that the APIs don't need to be kept stable
because that's the norm for most of the VNDK libraries that are not
LLNDK.

In order to eliminate the misunderstanding, rename the tag to 'llndk' so
that people introducing new such API will realize what they are signing
themselves up for.

Bug: 143765505
Test: m
Merged-In: Iae2acdf1ff4097a64a5c6280797c66abb1d5a5e6
(cherry picked from commit 0e957b82c8)
Change-Id: Iae2acdf1ff4097a64a5c6280797c66abb1d5a5e6
2019-11-13 14:32:44 +09:00
Josh Gao 594f70ffb8 Move adbd to an apex.
Test: adb shell "su 0 readlink /proc/\`pidof adbd\`/exe"
Change-Id: I84dfe4d1b28b619f98c03a2c8eeef2c783d30af2
2019-11-04 15:52:16 -08:00
Tom Cherry a379b1ce05 liblog: document the liblog<->logd protocol format
This protocol documentation is spread out among various functions
where it is implemented.  This change makes a single
README.protocol.md file with a high level overview, referencing the
struct names where useful.

Test: n/a
Change-Id: I83c9f484352b489b4a20cce241d92413f780f9ec
2019-10-24 11:19:06 -07:00
Tom Cherry e05b78412b liblog: remove unused parts of android_log_transport_context
Neither logMsg nor ret are needed in this struct anymore.

Test: build
Change-Id: Ic75158153767dd57d56a71b551a2b106cbdab6d7
2019-10-24 10:53:14 -07:00
Tom Cherry 441054aa1e Remove old logger_entry_v* formats
logger_entry and logger_entry_v2 were used for the kernel logger,
which we have long since deprecated.  logger_entry_v3 is the same as
logger_entry_v4 without a uid field, so it is trivially removable,
especially since we're now always providing uids in log messages.

liblog and logd already get updated in sync with each other, so we
have no reason for backwards compatibility with their format.

Test: build, unit tests
Change-Id: I27c90609f28c8d826e5614fdb3fe59bde22b5042
2019-10-24 10:53:14 -07:00
Tom Cherry 896fb9e57a liblog: disable header_abi_checker
I'm about to make a bunch of changes that are safe for backwards
compatibility, but would otherwise flag the checker, so it's time to
temporarily disable it.

Test: CLs pass despite making header changes
Change-Id: Ibc2d4ae51fb8e6125b9117ccd92bf821db945e67
2019-10-24 10:52:25 -07:00
Tom Cherry 350164cc7c Revert "liblog: remove mistakenly added symbols from vndk"
This reverts commit 5f8162b086.

Reason for revert: Turns out they're being used.

Merged-In: Iad9010190c7a4140b69dc553df5debdd88dcf81a
Change-Id: Iad9010190c7a4140b69dc553df5debdd88dcf81a
2019-10-23 11:39:13 -07:00
Tom Cherry 7867721e51 liblog: remove mistakenly added symbols from vndk
These functions and headers were all mistakenly added to the vndk.
They should not be used by vendors.

Test: these symbols do not appear in vendor libraries
Merged-In: I03919b437c2d9f0e573b7a6b40249ed12fe874b9
Change-Id: I03919b437c2d9f0e573b7a6b40249ed12fe874b9
2019-10-22 09:47:45 -07:00
Tom Cherry 5e81aa2cf5 liblog: fixup log_id_t
1) We don't need two copies of log_id_t
2) We don't need misleading sizeof_log_id_t or typeof_log_id_t macros
3) logd should use android_log_header_t explicitly for its recv buffer
   size
4) Following on from b/129272512, we're settling that returning
   LOG_ID_MAX is an acceptable return value from
   android_name_to_log_id().

Bug: 129272512
Test: build, liblog, logcat unit tests
Change-Id: I67fb964a4a0ae9cb6e1514ca110e47e00dfcfa9a
2019-10-18 09:58:08 -07:00
Tom Cherry 362e289c78 liblog: remove checks for __GNUC__
We already assume this in many other parts of the build.

Test: build
Change-Id: Ie685e83963eac942d0d176bb2394b5d3a5b86cac
2019-10-16 17:14:39 -07:00
Tom Cherry 443b5dfea7 Merge "liblog: remove client side permissions checking" 2019-10-16 13:57:41 +00:00
Tom Cherry fa88eeb95e Merge "liblog: remove unneeded checks and includes from headers" 2019-10-16 13:51:42 +00:00
Tom Cherry 1e59dcc203 liblog: remove client side permissions checking
There's no point in client side security checks in this library.  If a
process has access to these files, then they'll be able to do any of
these operations themselves.

Test: liblog unit tests
Change-Id: I75d4e1509eb8ff0ac4579f820a8968f4f5ad4e06
2019-10-15 16:06:06 -07:00
Tom Cherry 3ab3135bba liblog: enable more tests
Enable more of the disabled tests.  These should not be flaky and have
value.

The dual_reader test is rewritten in the style of RunLogTests() as
well.

Test: 100 iterations of these tests on CF without failure
Change-Id: I15de9e21b066aa22635cc0bd71b51e2648198823
2019-10-15 11:15:53 -07:00
Tom Cherry f5bad500f3 Merge "liblog: remove obsolete comment" 2019-10-15 14:48:05 +00:00
Tom Cherry c734eae375 liblog: remove unneeded checks and includes from headers
Test: build
Change-Id: Ifa3cffe60120fcc30a37239ceb2db46202a03471
2019-10-14 16:11:12 -07:00
Tom Cherry 4e58c84854 liblog: remove obsolete comment
The log_time struct satisfies all of the requirements for an
implicitly created copy constructor to be present, so not defining one
here does not have any real effect.

We don't want to delete the copy constructor for the rationale given
either; modern C++ favors passing small types by value instead of by
reference as the compiler has more opportunity for optimization in
that case.  That's especially true here, where the size of this struct
is the size of a pointer on 64 bit systems.

Test: the copy constructor exists for log_time
Change-Id: Id314ca7729f4b1ca02adb6c7f0ae759b22be2a5c
2019-10-14 13:23:29 -07:00
Tom Cherry c6a427205d liblog: use RunLogTests() for more tests
Continuing the speed up / clean up from the last change.

Enable a subtest that was previously disabled as well.  It passes 100s
of cycles now on CF.

Test: liblog-unit-tests
Change-Id: Ifff6f400c3736a1a857a3fdaf22d7ef1794abf9b
2019-10-14 13:11:26 -07:00
Tom Cherry dbc4815dbf liblog: don't sleep in the middle of tests
A lot of liblog tests follow this pattern:
1) Write a log message
2) Sleep ~1 second
3) Use the non_blocking log reader to dump all log messages
4) Test those log messages

This causes running back to back tests to be very slow and still
allows for some amount of flakiness if the system is very loaded.

This change replaces that pattern with the following:
1) Write a log message
2) Set an alarm for 2 seconds as a test timeout
3) Read logs with the blocking reader until finding the expected log
   messages
4) Test those log messages
5) Use the non_blocking reader to dump all log messages
6) Re-test those log messages, to ensure no duplicates, etc, which
   isn't done in step 3).

Despite dumping the logs twice, the tests are orders of magnitude
faster in the good case, and should be less prone to flakes.

Test: liblog-unit-tests
Change-Id: Iedf473316576b8007746fe3560815bde1813787a
2019-10-11 10:56:11 -07:00
Tom Cherry bbbf089137 liblog: use packed structs instead of raw unaligned reads
Per jmgao@, we still need to worry about unaligned integer accesses.

In any case, we already have the packed structs for all of the
unaligned data that we're reading, so this change favors using those
packed structs.

Bug: 142256213
Test: x86,arm32,arm64 liblog-unit-tests
Change-Id: I21fc629eac49895d03b5b31daa4cc494b0c4c230
2019-10-09 18:20:49 -07:00
Tom Cherry e3fc9ac7e3 Merge "liblog: remove alarm in logd_reader.cpp" 2019-10-09 14:48:38 +00:00
Tom Cherry 5398021b9e liblog: remove alarm in logd_reader.cpp
There is an alarm() call that provides a 30 second timeout in case
logd is unavailable.  The main reason for this is in the case that logd
is crashing, debuggerd is ptrace'ing logd, and tombstoned is
attempting to dump log messages.  In this case, with no other checks
and without this alarm, tombstoned will deadlock when dumping log
messages.

However, tombstoned already has two mechanisms to prevent the above
situation from happening:
1) It checks that the thread name that is is dumping is either logd or
   starts with "logd." and skips dumping logs in this case.
2) It does not dump logs if it is running in process for any process.

Calling alarm() or modifying signal handlers from general purpose
libraries is not recommended either, so without a strong reason to
keep this, this change removes it.

This also shortens the liblog.wrap_mode_blocks test time, since the 30
second issue that it ensures does not happen has been fundamentally
removed.

Test: `kill -8 `pidof logd`` succeeds without delay
Test: liblog, logd unit tests
Change-Id: Id8a40544645d220e49f7ba299201af80a0c44de9
2019-10-08 13:05:55 -07:00
Tom Cherry 5d7969b58a Merge "liblog: remove code checking for fd = 0" 2019-10-08 19:24:02 +00:00
Tom Cherry 29d0e89364 liblog: remove code checking for fd = 0
Fix a typo where I check socket()'s return value for 0 instead of -1
as an error.

Remove code that checks if socket() returns 0 as the actual fd that it
returns.  This should not happen in any well formed program.

Test: liblog unit tests
Change-Id: I1d878e85d9a39155d68c6c84e9cf9b0db8d1b3a4
2019-10-08 10:18:20 -07:00
Nick Desaulniers 34282df8bb [liblog] fix -Wreorder-init-list
Bug: 139945549
Test: mm
Change-Id: I57de1a650d2c85dfb4f8817bbc80eb2296eaf568
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
2019-10-07 21:28:43 -07:00
Tom Cherry 7e99b22527 liblog: run in isolated mode, disable flaky tests
We disabled then re-enabled a set of tests believing that they were
stable; they were not, so we disable them again while we investigate
their stability.

A majority of tests filter the logs from logd based on pid, so running
in isolation helps them not see unexpected information from other test
runs.

Bug: 138876729
Bug: 142041379

Test: run via gtest with gtest_repeat=10 without failure
Test: run via atest 5x times without failure
Test: observe that isolated applies to both gtest and atest
Change-Id: I757d52dd3233323be9519625868b2fd2aaa41aeb
2019-10-04 13:05:50 -07:00
Treehugger Robot c37e3f01ee Merge "liblog: use EXPECTED_STREQ for strings" 2019-10-03 18:40:32 +00:00
Tom Cherry 0de52e92dc liblog: use EXPECTED_STREQ for strings
These tests are flaky, but we're not seeing what the failure strings
are.

Bug: 142041379
Test: force a failure and see the right error message
Change-Id: Icd7777e5c309cac3b98ce65925980965a3cc3753
2019-10-03 07:32:24 -07:00
Tom Cherry 685949daad Merge "liblog: remove superfluous checks" 2019-10-03 13:58:35 +00:00
Tom Cherry 47fdf666fb Merge "liblog: don't set transports to nullptr when they close" 2019-10-03 13:58:09 +00:00
Tom Cherry 990852ff7d liblog: remove superfluous checks
More checks in static functions where all callers always satisfy them.

Test: build
Change-Id: I3c9bd1fd4e5c55a2f9f2c42d5259c5cdd8f8a853
2019-10-02 14:27:04 -07:00
Tom Cherry 97ec4eecd4 liblog: don't set transports to nullptr when they close
The old code did not free the transports, just unlink their nodes from
the linked list, so there was no race condition between close() and
other threads writing to the logs.  By settings these to nullptr, I
introduced a race condition, but setting them to nullptr isn't
necessary, so let's simply not do that.

Test: liblog-unit-tests
Change-Id: Iec0b680addd13b5d30bd91ccef5bdeab6bf797b0
2019-10-02 14:22:07 -07:00
Elliott Hughes 6efbda7309 liblog: replace crufty min macro with existing MIN.
The "branchless" macro generates slightly worse code than std::min or
<sys/param.h>'s MIN.

Test: treehugger
Change-Id: I92c17325383bd6116c7b4736d42f01f7a9bb81a3
2019-10-02 12:27:03 -07:00
Tom Cherry 173e4ba26a Merge "liblog: remove more endianness functions" 2019-10-02 14:03:04 +00:00
Tom Cherry d1ad89534a liblog: remove more endianness functions
And fix a mistake from the earlier CL.

Bug: 141962035
Test: liblog-unit-tests
Change-Id: Id41c47e760f79c0e8bdea54f3644752e2bf7494e
2019-10-02 03:28:49 +00:00
Tom Cherry 0f6ea6e8b6 liblog: remove a few unused items
Test: build
Change-Id: I8a31ad3a9fcd6f74f3a0221d38b64e8e2ea7ea2d
2019-10-01 17:29:13 -07:00
Tom Cherry 2187a41586 liblog: fix prio and tag validation code
These checks are not needed; all callers are in this file and there's
only one possible situation: that we have valid pointers and sizes.

Test: liblog-unit-tests, log.tag.* properties still work
Change-Id: I8b385d5124c2d93cd99a352e30f745b075c8bd09
2019-10-01 17:13:43 -07:00
Tom Cherry 2beabe5c26 liblog: remove config_write.cpp/.h
Now that we only have one transport in a given build configuration,
there is no need to have these lists.

Test: liblog-unit-tests
Change-Id: I3fdcdc33c1224a9522080ea06f36f14c83d946ac
2019-10-01 13:05:58 -07:00
Tom Cherry 9d35034437 liblog: remove log/log_transport.h
There are no users; future versions will need to be more generic to
support the libbase style Logger/Aborter options.

Test: build, liblog-unit-tests
Change-Id: Ia4571cd39d3e499f18306920ecbf40ea8878fb81
2019-10-01 08:14:40 -07:00
Tom Cherry 4c63e04f2a liblog: remove endianness functions
Android is little endian.

Test: liblog unit tests
Change-Id: Ieea7af39013a97f9f0d138a6d1ada3524d94e710
2019-09-30 14:39:37 -07:00
Tom Cherry ebb7cdd0ac liblog: remove unused test #defines and transport code
We only ever have the default logger now, so we can remove this code.

Test: liblog unit tests

Change-Id: Ic3755d1c807c53192c614860a3cbe985748a3fe8
2019-09-30 14:16:08 -07:00
Tom Cherry 2238ce2d7f liblog: remove stderr logger
There are no users of the liblog stderr logger, but 66 users of
android::base::StderrLogger.  We'll prefer that format and work to
merge it into liblog.

Test: liblog-unit-tests
Change-Id: Ifad24b27ac0f51379b925f6644caa1f6f3d9ad81
2019-09-30 13:51:09 -07:00
Tom Cherry 7d045f6b74 liblog: add -Wall,-Wextra and do related clean-up.
Test: build
Change-Id: I3b33f2b896cb8bf7ad9edf110d1739d559028282
2019-09-30 12:58:55 -07:00
Tom Cherry 0bf41672e9 liblog: run liblog#enoent only as root
Previously this test would rely on ro.debuggable being true, but there
are now some circumstances where ro.debuggable is true, yet `su` does
not exist.  Therefore we only run this test when it is root.

Also simplify some of the test macros.

Bug: 140446213
Test: passes as root, skips as non-root
Change-Id: I0651963d5c7d4f5308989ab6b04aab1042094e5a
2019-09-04 13:39:06 -07:00
Tom Cherry f7e1b1ebd4 liblog: only allow one transport for reading
liblog has left over code from local_logger that allows for reading
from multiple sources and merging the contents.  Since we've already
removed local_logger, this change removes the rest of this code.

Test: liblog-unit-tests
Change-Id: I5685ad6c1e7cbcaa0a660ed10f47714784a40791
2019-08-26 19:50:32 -07:00
Tom Cherry 1bc130184c liblog: enable tests accidentally disabled
Some tests were meant to be run with logd only and were ifdef'ed based
on USING_LOGGER_DEFAULT.  Unfortunately a previous change removed the
appropriate #define, so these tests weren't being run at all.  They
passed multiple times on CF, so they should still be stable.

Except for one test for __android_log_event_list.  We removed that
struct, so this change removes the test as well.

Test: liblog-unit-tests on CF (5 runs)

Change-Id: Ifaf3dbfdc5c714aead3f26c333e9cf19a1ed86c6
2019-08-23 15:28:17 -07:00
Tom Cherry d00b3affda liblog: Remove stdbool.h from .cpp files
We're C++ now, so we don't need stdbool.h

Test: build
Change-Id: I2c65f0d3edddaf77256bd0bc3d60378bcfaef180
2019-08-07 14:30:41 -07:00
Elliott Hughes de3ad1d718 Remove an ancient spam-busting hack from logd.
We have real spam detection and suppression now anyway.

Bug: 20143912
Test: build
Change-Id: I7bd4bb189373569fd1e5a7b3f2b90ce816abe864
2019-07-08 11:10:11 -07:00
Haibo Huang 9d47360c7e Fix format string for new google benchmark
Exempt-From-Owner-Approval: Fix build..
Test: build
Change-Id: I5b7dc76a6e8a9ee42cb9200b95db3ef5f335692a
2019-06-07 04:31:00 +00:00
dimitry a808b1150a Enable native_bridge_support
Enable native bridge support for libbase, liblog,
libziparchive and libpropertyinfoparser.

This makes it possible to use them in binaries for translated
architectures.

Bug: http://b/77159578
Test: make
Change-Id: If67ce92288b17a052ea1e79a268e284f7d941439
2019-05-06 14:05:05 +02:00
Treehugger Robot 84235b7137 Merge "Workaround bad markdown parser." 2019-05-03 00:40:29 +00:00