Skip to content

Commit 502bdcf

Browse files
cblichmanncopybara-github
authored andcommitted
Use absl::byteswap in minielf
Abseil's `internal/endian.h` will become private with abseil-cpp LTS 202507. PiperOrigin-RevId: 764221623 Change-Id: Id12e24a115d15a3d93722358bc81d1bdaaad2c09
1 parent 5d2a0fb commit 502bdcf

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

sandboxed_api/sandbox2/util/BUILD

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ cc_library(
5252
"//sandboxed_api/sandbox2:util",
5353
"//sandboxed_api/util:raw_logging",
5454
"//sandboxed_api/util:status",
55-
"@abseil-cpp//absl/base:endian",
55+
"@abseil-cpp//absl/base:nullability",
56+
"@abseil-cpp//absl/numeric:bits",
5657
"@abseil-cpp//absl/status",
5758
"@abseil-cpp//absl/status:statusor",
5859
"@abseil-cpp//absl/strings",

sandboxed_api/sandbox2/util/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ add_library(sandbox2_util_minielf ${SAPI_LIB_TYPE}
2929
)
3030
add_library(sandbox2::minielf ALIAS sandbox2_util_minielf)
3131
target_link_libraries(sandbox2_util_minielf PRIVATE
32+
absl::bits
3233
absl::status
3334
absl::strings
3435
sandbox2::util

sandboxed_api/sandbox2/util/minielf.cc

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,8 @@
2727
#include <utility>
2828
#include <vector>
2929

30-
// TODO: internal/endian.h will become private with abseil-cpp LTS 202507.
31-
// Switch to absl::byteswap.
32-
#include "absl/base/internal/endian.h"
30+
#include "absl/base/nullability.h"
31+
#include "absl/numeric/bits.h"
3332
#include "absl/status/status.h"
3433
#include "absl/status/statusor.h"
3534
#include "absl/strings/match.h"
@@ -123,18 +122,32 @@ class ElfParser {
123122
private:
124123
ElfParser() = default;
125124

126-
// Endianess support functions
127-
uint16_t Load16(const void* src) {
128-
return elf_little_ ? absl::little_endian::Load16(src)
129-
: absl::big_endian::Load16(src);
125+
// Endianness support functions
126+
uint16_t Load16(const void* absl_nonnull src) {
127+
uint16_t v;
128+
memcpy(&v, src, sizeof(v));
129+
if constexpr (absl::endian::native == absl::endian::little) {
130+
return elf_little_ ? v : absl::byteswap(v);
131+
}
132+
return elf_little_ ? absl::byteswap(v) : v;
130133
}
131-
uint32_t Load32(const void* src) {
132-
return elf_little_ ? absl::little_endian::Load32(src)
133-
: absl::big_endian::Load32(src);
134+
135+
uint32_t Load32(const void* absl_nonnull src) {
136+
uint32_t v;
137+
memcpy(&v, src, sizeof(v));
138+
if constexpr (absl::endian::native == absl::endian::little) {
139+
return elf_little_ ? v : absl::byteswap(v);
140+
}
141+
return elf_little_ ? absl::byteswap(v) : v;
134142
}
135-
uint64_t Load64(const void* src) {
136-
return elf_little_ ? absl::little_endian::Load64(src)
137-
: absl::big_endian::Load64(src);
143+
144+
uint64_t Load64(const void* absl_nonnull src) {
145+
uint64_t v;
146+
memcpy(&v, src, sizeof(v));
147+
if constexpr (absl::endian::native == absl::endian::little) {
148+
return elf_little_ ? v : absl::byteswap(v);
149+
}
150+
return elf_little_ ? absl::byteswap(v) : v;
138151
}
139152

140153
template <size_t N>

0 commit comments

Comments
 (0)